Acabei de atualizar de 4.2 para 4.4 e agora minha consulta de taxonomia retorna vazia. Ele está funcionando bem antes da atualização.
Registrei uma taxonomia personalizada chamada 'title'
, que é usada pelo meu tipo de postagem personalizado 'sg-publications'
. Seguindo a hierarquia de modelos do WP, criei um modelo chamado taxonomy-title.php
que usa os argumentos de consulta padrão e até agora mostrava corretamente cada publicação por seu título.
Aqui está a saída de $ queried_object e $ wp_query-> request nesse modelo:
[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
O problema que vejo na consulta acima é logo depois WHERE 1=1
, por algum motivo, está procurando post_title = 'stroupe-scoop'
. Isso não está correto - esse é o termo lesma da taxonomia, não o título da postagem. De fato, quando eu comento essa linha e a executo no banco de dados, recebo os retornos adequados. Então, o que está fazendo com que o WP adicione essa condição, quando (presumo) ele não estava sendo adicionado antes de atualizar para o 4.4?
Aqui 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();
E no functions.php eu tenho esse 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
? Você procurou nos temasfunctions.php
para verificar se existem filtros na consulta principal?Respostas:
Eu não recomendaria o uso de uma lesma de taxonomia que coincida com as variáveis de consulta pública, como
title
.A
title
variável de consulta foi introduzida no 4.4, então acho que isso poderia explicar seus problemas.Confira esta parte da
WP_Query
aula:Então, quando usamos, por exemplo:
o que o WordPress deve fazer aqui? É uma consulta de taxonomia ou pesquisa de título?
Portanto, eu recomendaria o prefixo da lesma de taxonomia personalizada, por exemplo
para evitar possíveis colisões de nomes.
Atualizar:
Obrigado a @ ocean90 por apontar que este é um erro, que será corrigido no 4.4.1
fonte
code
, porque isso fazia todo o back-end do administrador monospace. Nomes genéricos são sempre candidatos a colisão. Por outro lado, o WordPress deve prefixar seus próprios internos.