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.php
que 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 );
taxonomy-title.php
? ¿Buscó en los temasfunctions.php
para verificar si hay algún filtro en la consulta principal?Respuestas:
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_Query
clase:Entonces cuando usamos por ejemplo:
¿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
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
fuente
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.