Consulta de taxonomía personalizada rota después de la actualización a 4.4

9

Acabo de actualizar de 4.2 a 4.4 y ahora mi consulta de taxonomía vuelve vacía. Ha estado funcionando bien antes de la actualización.

He registrado una taxonomía personalizada llamada 'title', que es utilizada por mi tipo de publicación personalizada 'sg-publications'. Siguiendo la jerarquía de plantillas de WP, creé una plantilla llamada taxonomy-title.phpque usa los argumentos de consulta predeterminados, y hasta ahora ha mostrado correctamente cada publicación por su título.

Aquí está la salida de $ queried_object y $ wp_query-> request en esa plantilla:

[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 

El problema que veo en la consulta anterior es justo después WHERE 1=1, por alguna razón está buscando post_title = 'stroupe-scoop'. Esto no es correcto, ese es el término taxonomía babosa, no el título de la publicación. De hecho, cuando comento esa línea y la ejecuto contra la base de datos, obtengo los retornos adecuados. Entonces, ¿qué está causando que WP agregue esa condición, cuando (supongo) que no la estaba agregando antes de actualizar a 4.4?

Aquí está 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();

Y en functions.php tengo este filtro de consulta:

// 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 );
Gary D
fuente
¿Dónde está el código de consulta? Si está en su plantilla, ¿por qué no elimina la parte que la rompe? Si no es así, ¿qué utilizó para generar la consulta?
montrealist
No hay un código de consulta personalizado, estoy usando el bucle predeterminado de WP. Debido a que estoy siguiendo la Jerarquía de plantillas, WP debería (y tiene, antes de la actualización) generar los parámetros de consulta correctos para mi taxonomía.
Gary D
2
¿Cuál es el contenido de tu taxonomy-title.php? ¿Buscó en los temas functions.phppara verificar si hay algún filtro en la consulta principal?
montrealist el

Respuestas:

5

No recomendaría usar una babosa de taxonomía que coincida con las variables de consulta pública, como title.

La title variable de consulta se introdujo en 4.4, así que creo que eso podría explicar sus problemas.

Mira esta parte de la WP_Queryclase:

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

Entonces cuando usamos por ejemplo:

example.tld/?title=test

¿Qué debe hacer WordPress aquí? ¿Es una consulta de taxonomía o búsqueda de título?

Por lo tanto, recomendaría prefijar la babosa de taxonomía personalizada, por ejemplo

gary_title

para evitar posibles colisiones de nombres.

Actualizar:

Gracias a @ ocean90 por señalar que se trata de un error, que se solucionará en 4.4.1

Birgire
fuente
2
Gracias por el aviso sobre el cambio en 4.4. Tenía la sospecha de que podría ser un conflicto de nombres. Lo seguiré una vez que realice algunas pruebas.
Gary D
Hasta hace unas pocas versiones, no podías registrar un tipo de publicación code, porque eso hacía que todo el backend de administración fuera monoespaciado. Los nombres genéricos son siempre candidatos a colisiones. Por otro lado, WordPress debería anteponer sus propios elementos internos.
fuxia
Sí, eso fue todo. Una vez que cambié el término de la taxonomía y los nombres de archivo relacionados a un esquema no conflictivo, todo volvió a funcionar. Gracias de nuevo por señalarme el código WP actualizado.
Gary D
me alegra saber que está funcionando nuevamente @GaryD
birgire
genial, tengo que probar eso cuando tenga en mis manos una instalación antigua ;-) Definitivamente apoyaría ese ticket de prefijo, pero no veo que eso suceda en el futuro cercano, lamentablemente @toscho
birgire