Ma question vient de celui-ci . Je n'ai jamais vraiment abordé les règles de réécriture, car elles n'ont toujours aucun sens pour moi.
J'ai réussi à construire le lien suivant
http://localhost/wordpress/custom-archive/
qui devrait, par défaut, conduire à une page 404, car custom-archive
n'existe pas. C'est pareil que visiter
http://localhost/wordpress/category/
Cette partie fonctionne bien.
Maintenant, que se passe-t-il, ce lien apparaît et ne s'affiche que sur un seul message lorsque celui-ci comporte des catégories et une étiquette. Si l'article contient des catégories et/ou des balises, j'ajoute les identifiants de catégorie et de balise pertinents au lien via query_vars
personnalisé. Le lien ressemble alors à ceci
http://localhost/wordpress/custom-archive/?cq=21&tq=18,19,20,144
Je peux, en utilisant template_include
, à chaque fois qu’un des deux query_vars
existe, utiliser un modèle personnalisé. Cela marche
En ayant une requête personnalisée sur ce modèle spécifique, affichez les publications correctes
Bien que je reçoive des messages avec une requête personnalisée (que je souhaite également éliminer), la requête principale 404. Cela peut être vu dans ma chapelure et dans l'onglet du navigateur qui affiche "Page introuvable"
J'ai utilisé pre_get_posts
pour obtenir les valeurs de mon query_vars
personnalisé pour modifier la requête principale, mais cela ne fonctionne pas car Wordpress essaie de lire la page en tant que publication ou page unique.
J'ai aussi essayé de réécrire les règles, ce qui n'aide pas non plus ma cause. Le problème ici est que je ne peux vraiment pas obtenir la bonne combinaison. Je sais que je dois en quelque sorte dire à Wordpress que cette page est une archive personnalisée et non un message ou une page, puis utiliser les valeurs de mon query_vars
personnalisé dans un tax_query
pour obtenir des messages appartenant aux catégories ET tags donnés dans le query_vars
personnalisé
Des suggestions aux règles de réécriture correctes pour y parvenir?
Je sais que je dois en quelque sorte réécrire
http://localhost/wordpress/custom-archive/?cq=XXX&tq=XXX
à quelque chose où Wordpress peut comprendre qu’il s’agit d’une page d’archive personnalisée (ou page virtuelle) pour le type de message post
, et que les messages qui doivent être affichés sur la page doivent correspondre aux messages qui sont dans les catégories indiquées par cq
ET a des balises qui sont données par tq
.
Ceci est une idée de base de ce qui fonctionne dans mon modèle personnalisé avec une requête personnalisée
$args = [
'post_type' => 'post',
'tax_query' => [
'relation' => 'AND',
[
'taxonomy' => 'category',
'terms' => get_query_var( 'cq' ),
],
[
'taxonomy' => 'post_tag',
'terms' => get_query_var( 'tq' ),
],
],
];
$q = new WP_Query( $args );
J'ai besoin de traduire cela pour fonctionner pour la requête principale. Ajouter simplement ce qui précède à pre_get_posts
ne fonctionne pas, la page ne contient que 404, de sorte que l'URL doit être réécrite pour que cela fonctionne.
Vous pouvez créer une archive de messages en définissant simplement post_type=post
dans votre règle de réécriture:
function custom_archive_rule() {
add_rewrite_rule(
'custom-archive/?',
'index.php?post_type=post',
'top'
);
}
add_action( 'init', 'custom_archive_rule' );
WordPress l'identifiera par is_home
; vous devrez donc le cibler dans pre_get_posts
en fonction de l'existence de vos variables de requête supplémentaires.
function custom_arcive_tax( $query ) {
if ( $query->is_home()
&& $query->is_main_query()
&& isset( $_GET['cq'] ) ) {
$tax_query = array(
array(
'taxonomy' => 'category',
'terms' => $_GET['cq'],
)
);
$query->set( 'tax_query', $tax_query );
}
}
add_action( 'pre_get_posts', 'custom_arcive_tax' );