Usando parámetros de URL, enumere publicaciones de categoría y taxonomía personalizada

4

Por ejemplo, http://example.com/?cat=6&tag=books enumera las publicaciones que pertenecen a la categoría ID 6 y los 'libros' etiquetados (es decir, las publicaciones que cumplen ambas condiciones).

De forma similar, http://example.com/feed/?cat=6&tag=books hace lo mismo para las fuentes.

Ahora, digamos que mi blog tiene una taxonomía personalizada llamada "edición", con los términos 'usa', 'uk', 'china', y demás, debajo de ella. La URL http://example.com/?edition=usa,china enumera las publicaciones que pertenecen a ambas ediciones 'usa' y 'china'.

Y http://example.com/category/cars/?edition=usa enumera las publicaciones de la categoría 'Automóviles' que también pertenecen a el término de taxonomía personalizado 'usa'.

El problema

Uso el siguiente código en mis funciones.php:

add_filter('pre_get_posts','better_editions_archive');
function better_editions_archive( $better_editions_query ) {

    /* Looks like this line needs to be changed, not sure how */
    if ( $better_editions_query->is_tax( 'edition' ) && $better_editions_query->is_main_query() ) {

        $better_editions_terms = get_terms( 'edition', array( 'fields' => 'ids' ) );
        $better_editions_query->set( 'post_type', array( 'post' ) );
        $better_editions_query->set( 'tax_query',
            array(
                'relation' => 'OR',
                array(
                    'taxonomy' => 'edition',
                    'field' => 'id',
                    'terms' => $better_editions_terms,
                    'operator' => 'NOT IN'
                )
            )
        );

    }

    return $better_editions_query;
}

El código se asegura de que si una publicación no está asignada a ninguna Edición (es decir, si una publicación no está asignada a ningún término que pertenezca a la "edición" de la taxonomía personalizada), se muestra la publicación / enumerados en todos los archivos / feeds de términos de la "edición" de taxonomía personalizada.

Ahora, http://example.com/category/cars/?edition=usa solo enumera las publicaciones que pertenecen a la categoría 'autos' y específicamente marcadas 'usa' (un término que pertenece a la taxonomía personalizada 'edición'). No muestra las publicaciones que no están asignadas a ningún término en la "edición" de la taxonomía personalizada. ¿Cómo soluciono esto?

( PS: La configuración de los términos predeterminados para las publicaciones no es una opción, ya que podemos agregar más ediciones más adelante.)

Resuelto pero ...

He encontrado una solución que puedes ver como una respuesta a esta pregunta. La recompensa sigue en pie, así que siéntete libre. :)

    
pregunta its_me 01.07.2013 - 20:02

2 respuestas

3

En circunstancias generales, al usar parámetros de URL, puede enumerar las publicaciones que pertenecen a una categoría específica Y una taxonomía personalizada, como esta:

http://example.com/category/cars/?edition=usa

Donde, category es la base de categorías que está utilizando para las categorías en su sitio (WordPress Dashboard > Settings > Permalinks > Category base); edition es la base / slug de la taxonomía personalizada; y usa es un término bajo la taxonomía personalizada.

Si desea incluir más de una categoría / taxonomía personalizada, esto podría ayudar:

http://example.com/category/cars/?edition=usa,india
http://example.com/?category_name=cars,books&edition=usa,india

Y Feeds:

http://example.com/category/cars/?edition=usa,india&feed=rss2
http://example.com/?category_name=cars,books&edition=usa,india&feed=rss2

Lectura adicional:

PERO ...

Como se explica en mi pregunta, el mío es un caso complejo, por lo que he desarrollado una solución alternativa simple. Aquí va ...

  1. El bloque de código en la pregunta asegura que si una publicación no está asignada a ninguna edición (es decir, si una publicación no está asignada a ningún término que pertenezca a la "edición" de la taxonomía personalizada), la publicación se muestra / aparece en todas término archivos / feeds de la taxonomía personalizada 'edición'.

    PERO AHORA , eliminé ese código. Luego creó un nuevo término bajo la taxonomía personalizada 'edición', llamada 'intl' (Internacional). Cualquier publicación que quiera mostrarse en todas las Ediciones se asignará a 'intl'. Pero, ¿cómo me aseguro de que todas las publicaciones asignadas a 'intl' se muestren en todos los archivos / feeds de términos de mi taxonomía personalizada?

    Para eso, ahora uso este código (entra en functions.php):

    add_filter('pre_get_posts','better_editions_archive');
    function better_editions_archive( $query ) {
        if ( $query->is_tax( 'edition' ) && $query->is_main_query() ) {
            $query->set( 'post_type', array( 'post' ) );
            $query->set( 'tax_query',
                array(
                    'relation' => 'OR',
                    array(
                        'taxonomy' => 'edition',
                        'field' => 'slug',
                        'terms' => 'intl',
                        'operator' => 'IN'
                    )
                )
            );
        }
        return $query;
    }
    

    Así que ahora, por ejemplo, http://example.com/edition/usa/ enumera las publicaciones que pertenecen a 'usa' o 'intl' (que son términos de mi 'edición' de taxonomía personalizada). Su feed, http://example.com/edition/usa/feed/ también hace lo mismo.

  2. Volver al problema principal de la pregunta. ¿Cómo enumero las publicaciones que pertenecen a una categoría específica Y una edición, usando parámetros de URL?

    Por ejemplo, ¿cómo enumero las publicaciones que pertenecen a la categoría 'autos' Y a la edición 'usa'?

    Este es el aspecto que debe tener la URL: http://example.com/category/cars/?edition=usa,intl (ya que también queremos las publicaciones que se muestran en todas las ediciones, es decir, las publicaciones asignadas al término 'intl'). En cuanto a feeds: http://example.com/category/cars/feed/?edition=india,intl

Eso es todo!

(gracias especiales a @kaiser por su ayuda.)

Notas

Si desea modificar estrictamente la consulta principal / el bucle dentro de la plantilla, por ejemplo. taxonomy-edition.php (en mi caso), aquí hay un ejemplo de cómo se puede hacer:

<?php
$edition_term = get_term( get_queried_object(), 'edition' )->slug;
$better_editions = new WP_Query(
    array(
        'post_type' => 'post',
        'tax_query' => array(
            array(
                'taxonomy' => 'edition',
                'field' => 'slug',
                'terms' => array( $edition_term, 'intl' )
            )
        )
    )
);
?>

    <?php /* Blah, Blah, Blah! */ ?>

<?php if ( $better_editions->have_posts() ) : ?>

    <?php /* Start the Loop */ ?>
    <?php while ( $better_editions->have_posts() ) : $better_editions->the_post(); ?>
        <?php get_template_part( 'content', get_post_format() ); ?>
    <?php endwhile; wp_reset_postdata(); ?>

<?php else : ?>

    <?php /* Blah, Blah, Blah! */ ?>

<?php endif; ?>

No obstante, a menos que realmente tengas que hacerlo, ve con pre_get_posts .

    
respondido por el its_me 04.07.2013 - 16:18
-2

Es posible que tengas que estudiar el uso de wp_query. en el que configura su propia consulta para mostrar cualquier categoría que le guste, y luego, cuando termine, restablézcala a su comportamiento predeterminado.     

respondido por el Greeso 04.07.2013 - 01:37

Lea otras preguntas en las etiquetas