Utilizzo dei parametri URL per elencare i post da categoria e tassonomia personalizzata
Ad esempio, http://example.com/?cat=6&tag=books
elenca i post che appartengono alla categoria ID 6 e sono taggati come 'books' (cioè i post che soddisfano entrambe le condizioni).
Analogamente, http://example.com/feed/?cat=6&tag=books
fa lo stesso per i feed.
Ora, supponiamo che il mio blog abbia una tassonomia personalizzata chiamata 'edition', con termini 'usa', 'uk', 'china', e così via. L'URL http://example.com/?edition=usa,china
elenca i post che appartengono a entrambe le edizioni 'usa' e 'china'.
E http://example.com/category/cars/?edition=usa
elenca quei post dalla categoria 'Cars' che appartengono anche al termine della tassonomia personalizzata 'usa'.
Il problema
Uso il codice seguente nel mio functions.php:
add_filter('pre_get_posts','better_editions_archive');
function better_editions_archive( $better_editions_query ) {
/* Sembra che questa riga debba essere modificata, non sono sicuro di come */
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;
}
Il codice assicura che se un post non è assegnato a nessuna Edition (cioè se un post non è assegnato a nessun termine appartenente alla tassonomia personalizzata 'edition'), il post viene mostrato/elencato in tutti gli archivi/feed dei termini della tassonomia personalizzata 'edition'.
Ora, http://example.com/category/cars/?edition=usa
elenca solo i post che appartengono alla categoria 'cars' e specificamente marcati come 'usa' (un termine appartenente alla tassonomia personalizzata 'edition'). Non mostra quei post che non sono assegnati a nessun termine nella tassonomia personalizzata 'edition'. Come posso risolvere questo problema?
(PS: Impostare termini predefiniti per i post non è un'opzione, poiché potremmo aggiungere altre edizioni in seguito.)
Risolto ma...
Ho elaborato una soluzione che potete vedere come risposta a questa domanda. Il bounty è ancora valido, quindi sentitevi liberi. :)

In circostanze generali, utilizzando i parametri URL, puoi elencare i post che appartengono a una specifica categoria E a una tassonomia personalizzata, in questo modo:
http://example.com/category/cars/?edition=usa
Dove, category
è la base delle categorie che stai utilizzando sul tuo sito (Dashboard WordPress > Impostazioni > Permalinks > Base categoria); edition
è la base/slug della tassonomia personalizzata; e usa
è un termine sotto la tassonomia personalizzata.
Se vuoi includere più di una categoria/tassonomia personalizzata, questi esempi potrebbero aiutarti:
http://example.com/category/cars/?edition=usa,india
http://example.com/?category_name=cars,books&edition=usa,india
E i Feed:
http://example.com/category/cars/?edition=usa,india&feed=rss2
http://example.com/?category_name=cars,books&edition=usa,india&feed=rss2
Letture aggiuntive:
MA...
Come spiegato nella mia domanda, il mio è un caso complesso, quindi ho sviluppato una semplice soluzione alternativa. Ecco come...
Il blocco di codice nella domanda assicura che se un post non è assegnato a nessuna Edizione (cioè se un post non è assegnato a nessun termine che appartiene alla tassonomia personalizzata 'edition'), il post viene mostrato/elencato sotto tutti gli archivi/feed dei termini della tassonomia personalizzata 'edition'.
MA ORA, ho rimosso quel codice. Poi ho creato un nuovo termine sotto la tassonomia personalizzata 'edition', chiamato 'intl' (Internazionale). Qualsiasi post che voglio venga visualizzato sotto tutte le Edizioni sarà assegnato a 'intl'. Ma come faccio a garantire che tutti i post assegnati a 'intl' appaiano in tutti gli archivi/feed dei termini della mia tassonomia personalizzata?
Per questo, ora uso questo codice (va inserito in 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; }
Quindi ora, ad esempio,
http://example.com/edition/usa/
elenca i post che appartengono a 'usa' o 'intl' (che sono termini sotto la mia tassonomia personalizzata 'edition'). Il suo feed,http://example.com/edition/usa/feed/
fa lo stesso.Tornando al problema principale della domanda. Come elenco i post che appartengono a una categoria specifica E a un'edizione, utilizzando i parametri URL?
Ad esempio, come elenco i post che appartengono alla categoria 'cars' E all'edizione 'usa'?
Questo è come dovrebbe essere l'URL:
http://example.com/category/cars/?edition=usa,intl
(poiché vogliamo anche quei post che sono mostrati sotto tutte le edizioni, cioè quelli assegnati al termine 'intl'). Per i feed:http://example.com/category/cars/feed/?edition=india,intl
Ecco fatto!
(Un ringraziamento speciale a @kaiser per il suo aiuto.)
Note
Se vuoi modificare la query principale/loop direttamente all'interno del template, ad esempio taxonomy-edition.php (nel mio caso), ecco un esempio su come può essere fatto:
<?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 /* Inizio del 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; ?>
Tuttavia, a meno che non sia strettamente necessario, usa pre_get_posts
.

Sono confuso su ciò con cui hai difficoltà. Nella tua risposta dici: "utilizzando i parametri URL, puoi elencare i post che appartengono a una categoria specifica E a una tassonomia personalizzata, in questo modo...", e poi più avanti: "Tornando al problema principale della domanda. Come faccio a elencare i post che appartengono a una categoria specifica E a un'edizione, utilizzando i parametri URL?" Puoi spiegare (brevemente, dato che la mia capacità di attenzione è piuttosto limitata) con cosa hai bisogno di aiuto?

@MatthewBoynes Ho chiaramente affermato all'inizio della seconda parte della mia risposta: "Come spiegato nella mia domanda, il mio è un caso complesso..." cioè stavo usando un codice (vedi domanda) che "assicura che se un post non è assegnato a nessuna Edizione (cioè se un post non è assegnato a nessun termine che appartiene alla tassonomia personalizzata 'edizione'), il post viene mostrato/elencato in tutti gli archivi/feed dei termini della tassonomia personalizzata 'edizione'." Chiaro ora? :)

Il codice in questione sta già funzionando con la query principale. In che modo la creazione di una query secondaria risolverebbe il problema?

Quello che pensavo era creare una nuova query, che includesse sia la query principale in questione sia ciò che non viene visualizzato. Non ho fornito codice perché presupponevo che la mia risposta potesse essere una guida sufficiente per chi ha posto la domanda. Ovviamente non a molti piace questo approccio, tuttavia l'ho usato personalmente e funziona perfettamente.
