Requête de taxonomie personnalisée interrompue après la mise à niveau vers 4.4


9

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.phpqui 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 );

Où est le code de requête? Si c'est dans votre modèle, pourquoi ne supprimez-vous pas simplement la partie qui le casse? Si ce n'est pas le cas, qu'avez-vous utilisé pour générer la requête?
montréaliste

Il n'y a pas de code de requête personnalisé, j'utilise la boucle par défaut WP. Parce que je suis la hiérarchie des modèles, WP devrait (et a, avant la mise à niveau) générer les paramètres de requête corrects pour ma taxonomie.
Gary D

2
Quel est le contenu de votre taxonomy-title.php? Avez-vous regardé dans le thème functions.phppour vérifier s'il existe des filtres sur la requête principale?
montréaliste

Réponses:


5

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_Queryclasse:

    if ( '' !== $q['title'] ) {
        $where .= $wpdb->prepare( 
            " AND $wpdb->posts.post_title = %s", 
            stripslashes( $q['title'] ) 
        );
    }

Donc quand on utilise par exemple:

example.tld/?title=test

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

gary_title

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


2
Merci pour l'avertissement sur le changement de 4.4 - j'avais un soupçon que ce pourrait être un conflit de nommage. Je vais suivre une fois que j'ai exécuté quelques tests.
Gary D

Jusqu'à il y a quelques versions, vous ne pouviez pas enregistrer un type de publication 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.
fuxia

Oui, c'était ça. Une fois que j'ai changé le terme de taxonomie et les noms de fichiers associés en un schéma non conflictuel, tout est revenu. Merci encore de m'avoir indiqué le code WP mis à jour.
Gary D

heureux d'entendre qu'il est de nouveau opérationnel @GaryD
birgire

cool, je dois tester que lorsque je mets la main sur une ancienne installation ;-) Je soutiendrais certainement ce ticket de préfixe, mais je ne vois pas cela se produire dans un avenir proche, malheureusement @toscho
birgire
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.