Usando parámetros URL, listar entradas de categoría y taxonomía personalizada
Por ejemplo, http://example.com/?cat=6&tag=books
lista las entradas que pertenecen a la categoría ID 6 y están etiquetadas como 'books' (es decir, entradas que cumplen ambas condiciones).
De manera similar, http://example.com/feed/?cat=6&tag=books
hace lo mismo para los feeds.
Ahora, digamos que mi blog tiene una taxonomía personalizada llamada 'edition', con términos 'usa', 'uk', 'china', y así sucesivamente. La URL http://example.com/?edition=usa,china
lista las entradas que pertenecen a ambas ediciones 'usa' y 'china'.
Y http://example.com/category/cars/?edition=usa
lista aquellas entradas de la categoría 'Cars' que también pertenecen a el término de taxonomía personalizada 'usa'.
El problema
Uso el siguiente código en mi functions.php:
add_filter('pre_get_posts','better_editions_archive');
function better_editions_archive( $better_editions_query ) {
/* Parece que esta línea necesita ser cambiada, no estoy seguro cómo */
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 asegura que si una entrada no está asignada a ninguna Edition (es decir, si una entrada no está asignada a ningún término que pertenezca a la taxonomía personalizada 'edition'), la entrada se muestra/lista bajo todos los archivos de términos/feeds de la taxonomía personalizada 'edition'.
Ahora, http://example.com/category/cars/?edition=usa
solo lista las entradas que pertenecen a la categoría 'cars' y están específicamente marcadas como 'usa' (un término perteneciente a la taxonomía personalizada 'edition'). No muestra aquellas entradas que no están asignadas a ningún término en la taxonomía personalizada 'edition'. ¿Cómo puedo arreglar esto?
(PD: Establecer términos predeterminados para las entradas no es una opción, ya que podríamos agregar más ediciones más adelante.)
Resuelto pero...
He elaborado una solución que pueden ver como respuesta a esta pregunta. La recompensa sigue en pie, así que siéntanse libres. :)

En circunstancias generales, utilizando parámetros en la URL, puedes listar publicaciones que pertenecen a una categoría específica Y una taxonomía personalizada, así:
http://example.com/category/cars/?edition=usa
Donde, category
es la base de categorías que estás usando en tu sitio (Panel de WordPress > Ajustes > Enlaces permanentes > Base de categorías); edition
es la base/slug de la taxonomía personalizada; y usa
es un término dentro de la taxonomía personalizada.
Si deseas incluir más de una categoría/taxonomía personalizada, estos ejemplos podrían ayudarte:
http://example.com/category/cars/?edition=usa,india
http://example.com/?category_name=cars,books&edition=usa,india
Y los 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 expliqué en mi pregunta, mi caso es complejo, así que desarrollé una solución alternativa. Aquí está...
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 de la taxonomía personalizada 'edition'), la publicación se muestra/lista en todos los archivos/feeds de términos de la taxonomía 'edition'.
PERO AHORA, eliminé ese código. Luego creé un nuevo término en la taxonomía 'edition', llamado 'intl' (Internacional). Cualquier publicación que desee mostrarse en todas las Ediciones se asignará a 'intl'. Pero, ¿cómo me aseguro de que todas las publicaciones asignadas a 'intl' aparezcan en todos los archivos/feeds de términos de mi taxonomía personalizada?
Para ello, ahora uso este código (va 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/
lista publicaciones que pertenecen a 'usa' o 'intl' (que son términos de mi taxonomía 'edition'). Su feed,http://example.com/edition/usa/feed/
, hace lo mismo.Volviendo al problema principal de la pregunta. ¿Cómo listo publicaciones que pertenecen a una categoría específica Y una edición, usando parámetros en la URL?
Por ejemplo, ¿cómo listo publicaciones que pertenecen a la categoría 'cars' Y la edición 'usa'?
Así debería verse 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 asignadas al término 'intl'). Para los feeds:http://example.com/category/cars/feed/?edition=india,intl
¡Eso es todo!
(Un agradecimiento especial a @kaiser por su ayuda.)
Notas
Si deseas modificar la consulta principal/loop directamente en la plantilla, por ejemplo, taxonomy-edition.php (en mi caso), aquí tienes 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 /* Inicia el 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; ?>
Sin embargo, a menos que realmente lo necesites, usa pre_get_posts
.

Estoy confundido acerca de con qué estás teniendo problemas. Dices en tu respuesta: "usando parámetros de URL, puedes listar publicaciones que pertenecen a una categoría específica Y a una taxonomía personalizada, así...", y luego más adelante, "Volviendo al problema principal de la pregunta. ¿Cómo listo publicaciones que pertenecen a una categoría específica Y a una edición, usando parámetros de URL?" ¿Puedes explicar (brevemente, ya que mi capacidad de atención es bastante limitada) con qué necesitas ayuda?

@MatthewBoynes Claramente mencioné al inicio de la segunda parte de mi respuesta: "Como expliqué en mi pregunta, mi caso es complejo..." es decir, estaba usando un código (ver pregunta) que "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 taxonomía personalizada 'edition'), la publicación se muestre/liste en todos los archivos/feeds de términos de la taxonomía personalizada 'edition'". ¿Más claro ahora? :)

El código en cuestión ya funciona con la consulta principal. ¿Cómo ayudaría crear una consulta secundaria a resolver la pregunta?

Lo que estaba pensando era crear una nueva consulta que maneje tanto la consulta principal en cuestión como cualquier elemento que no se esté mostrando. No proporcioné código porque asumí que mi respuesta daría suficientes pautas a la persona que hizo la pregunta. Obviamente no a mucha gente le gusta este enfoque, sin embargo yo lo he usado y funciona perfectamente.
