Je viens de passer de 4.2 à 4.4 et maintenant ma requête de taxonomie revient vide. Il fonctionnait bien avant la mise à niveau.
J'ai enregistré une taxonomie personnalisée nommée 'title'
, qui est utilisée par mon type de publication personnalisé 'sg-publications'
. En suivant la hiérarchie des modèles WP, j'ai créé un modèle appelé taxonomy-title.php
qui utilise les arguments de requête par défaut, et jusqu'à présent, a correctement affiché chaque publication par son titre.
Voici la sortie de $ queried_object et $ wp_query-> request dans ce modèle:
[queried_object] => WP_Term Object
(
[term_id] => 1256
[name] => Stroupe Scoop
[slug] => stroupe-scoop
[term_group] => 0
[term_taxonomy_id] => 1374
[taxonomy] => title
[description] =>
[parent] => 0
[count] => 30
[filter] => raw
)
[queried_object_id] => 1256
[request] =>
SELECT wp_posts.*
FROM wp_posts
INNER JOIN wp_term_relationships
ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE 1=1
AND wp_posts.post_title = 'stroupe-scoop'
AND (
wp_term_relationships.term_taxonomy_id
IN (1374)
)
AND wp_posts.post_type = 'sg-publications'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private'
)
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date
DESC
Le problème que je vois dans la requête ci-dessus est juste après WHERE 1=1
, pour une raison quelconque, il recherche post_title = 'stroupe-scoop'
. Ce n'est pas correct - c'est le terme de taxonomie slug, pas le titre du message. En fait, lorsque je commente cette ligne et l'exécute sur la base de données, j'obtiens les retours appropriés. Alors, qu'est-ce qui amène WP à ajouter cette condition, quand (je suppose) il ne l'ajoutait pas avant de passer à 4.4?
Voici taxonomy-title.php:
<?php
/**
* @package WordPress
* @subpackage Chocolate
*/
global $wp_query;
$quer_object = get_queried_object();
$tax_desc = $quer_object->description;
$tax_name = $quer_object->name;
$tax_slug = $quer_object->slug;
get_header();
get_sidebar();
$title = get_the_title( $ID );
$args = array(
'menu' => 'new-publications',
'container' => 'div',
'container_id' => $tax_slug . '-menu',
'menu_class' => 'menu-top-style nav nav-tab',
'menu_id' => '',
'echo' => true,
'fallback_cb' => false,
'before' => '',
'after' => '',
'link_before' => '<i class="fa fa-chevron-circle-right fa-fw fa-2x"></i>',
'link_after' => '',
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
'depth' => 0,
'walker' => ''
);
?>
<div id="page-title">
<h1><?php _e( 'Publications - ' . $tax_name, LANGUAGE_ZONE ); ?></h1>
<p><?php _e( 'View our monthly newsletter and stay informed on the latest real estate news.', LANGUAGE_ZONE ); ?></p>
<?php wp_nav_menu($args); ?>
</div>
<div id="multicol">
<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();
get_template_part( 'loop' , 'title' );
endwhile;
endif;
?>
</div><!-- end #multicol -->
<section class="page-text well"><?php _e( $tax_desc, LANGUAGE_ZONE ); ?></section>
<?php
get_footer();
Et dans functions.php j'ai ce filtre de requête:
// use pre_get_posts to remove pagination from publications
function gd_publications_pagination( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( is_tax('title') ) {
// Display all posts for the taxonomy called 'title'
$query->set( 'posts_per_page', -1 );
return;
}
}
add_action( 'pre_get_posts', 'gd_publications_pagination', 1 );
taxonomy-title.php
? Avez-vous regardé dans le thèmefunctions.php
pour vérifier s'il existe des filtres sur la requête principale?Réponses:
Je ne recommanderais pas d'utiliser un slug de taxonomie qui coïncide avec les variables de requête publiques, comme
title
.La
title
variable de requête a été introduite dans 4.4 donc je pense que cela pourrait expliquer vos problèmes.Découvrez cette partie de la
WP_Query
classe:Donc quand on utilise par exemple:
que devrait faire WordPress ici? S'agit-il d'une requête de taxonomie ou d'une recherche de titre?
Je recommande donc de préfixer le slug de taxonomie personnalisé, par exemple
pour éviter d'éventuelles collisions de noms.
Mise à jour:
Merci à @ ocean90 d'avoir signalé qu'il s'agit d'un bug qui sera corrigé dans 4.4.1
la source
code
, car cela rendait l'ensemble du backend administrateur monospace. Les noms génériques sont toujours des candidats à la collision. D'un autre côté, WordPress devrait préfixer ses propres éléments internes.