¿Cómo crear un archivo para todas las publicaciones que no tienen un formato de publicación?

2

El título lo dice todo. Necesito la paginación de trabajo, la cantidad correcta de publicaciones, etc. Básicamente, una nueva página para publicaciones pero con un filtro para formatos de publicaciones.

Cosas que he probado hasta ahora:

1) Creó una nueva regla de reescritura para / no-formates / que obtiene el ID de la página que carga home.php y agrega un argumento (? no_post_format = true). Luego se enganchó a 'pre_get_posts', buscó ese argumento y agregó una consulta de impuestos a la consulta principal que excluye todas las publicaciones con formatos de publicación. Esto no funcionó porque una regla de reescritura a la página de inicio provoca un redireccionamiento a la página de inicio real. Así que / no-format / se convierte en / home / y mi argumento se pierde.

No es el código real, pero te daré una idea de lo que quiero decir:

add_rewrite_rule( 'no-formats/?$', 'index.php?p='. get_option( 'page_for_posts' ) . '&no_post_format=true', 'top' );

2) Creó una nueva página e intentó replicar el comportamiento de la página que muestra las publicaciones y agregó la exclusión de tax_query mencionada. Simplemente no pude encontrar ninguna manera de obtener una duplicación exacta de la página de inicio. Tal vez tenga que profundizar en el núcleo de WP.

¿Alguien tiene alguna idea que pueda empujarme en la dirección correcta?

    
pregunta Jan Beck 11.01.2014 - 12:06

2 respuestas

3

Para mí había utilizado un enfoque un poco diferente:

  1. use un endpoint para crear una url como http://example.com/no-formats/
  2. enganchar pre_get_posts para establecer la consulta adecuada si es necesario
  3. filter template_include para obligar a WP a usar home.php en lugar de duplicarlo

No más.

add_action('init', 'add_no_format_endpoint');

function add_no_format_endpoint() {
  add_rewrite_endpoint( 'no-formats', EP_ROOT );
}

add_action('pre_get_posts', 'handle_no_format');

function handle_no_format( $q ) {
  if ( $q->is_main_query() && is_home() && isset( $q->query['no-formats'] ) ) {
    unset( $q->query['no-formats'] );
    $q->is_home = FALSE; // <- add this if you have setted a static page as frontpage
    $tax_q =  array(
      'taxonomy' => 'post_format',
      'field' => 'id',
      'operator' => 'NOT IN',
      'terms' => get_terms( 'post_format', array( 'fields' => 'ids' ) )
    );
    $q->set( 'tax_query', array( $tax_q) );
    add_filter( 'template_include', 'force_home_template', 999 );
  }
}

function force_home_template() {
  return locate_template( array( 'home.php', 'index.php' ), FALSE );
}

Recuerde visitar Configuración- > Permalinks en su panel de control para vaciar las reglas de reescritura.

    
respondido por el gmazzap 11.01.2014 - 21:52
0

Editar

Nota: puede utilizar la misma técnica para una plantilla de página personalizada , con un bucle personalizado a través de new WP_Query() :

// Post Formats
$post_formats_array = array(
    'post-format-aside',
    'post-format-audio',
    'post-format-chat',
    'post-format-gallery',
    'post-format-image',
    'post-format-link',
    'post-format-status',
    'post-format-quote',
    'post-format-video'
);
// Custom query args
$standard_posts_query_args = array(    
    'tax_query' => array(
        array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            // Use array defined above,
            // or try omitting 'terms' entirely
            'terms' => $post_formats_array,             
            'operator' => 'NOT IN'
        )
    )
);
// Custom query
$standard_posts = new WP_Query( $standard_posts_query_args );

// Custom query loop
if ( $standard_posts->have_posts() ) : while ( $standard_posts->have_posts() ) : $standard_posts->the_post();
    // Loop markup here
endwhile; endif;

Paginación

Para la paginación, consulte esta Pregunta / Respuesta .

Respuesta original

¿Por qué no excluir simplemente las publicaciones con formatos de publicación del archivo de publicaciones principales?

function wpse129372_filter_posts_archive( $query ) {
    if ( $query->is_main_query && $query->is_archive() ) {
        $post_formats_array = array(
            'post-format-aside',
            'post-format-audio',
            'post-format-chat',
            'post-format-gallery',
            'post-format-image',
            'post-format-link',
            'post-format-status',
            'post-format-quote',
            'post-format-video'
        );
        $tax_query = array(
            array(
                'taxonomy' => 'post_format',
                'field' => 'slug',
                // Use array defined above,
                // or try omitting 'terms' entirely
                'terms' => $post_formats_array,             
                'operator' => 'NOT IN'
            )
        );
        $query->set( 'tax_query', $tax_query );
    }
}
add_action( 'pre_get_posts', 'wpse129372_filter_posts_archive' );

Esto, junto con (supongo) archivos de plantillas personalizadas (o plantillas de página personalizadas) para publicaciones con formatos de publicación, sería una forma bastante sencilla de mostrar solo publicaciones "estándar" en el índice de archivo.

    
respondido por el Chip Bennett 12.01.2014 - 06:12

Lea otras preguntas en las etiquetas