Permintaan taksonomi khusus rusak setelah peningkatan ke 4.4

9

Saya baru saja memutakhirkan dari 4.2 ke 4.4 dan sekarang permintaan taksonomi saya kembali kosong. Sudah berfungsi dengan baik sebelum peningkatan.

Saya telah mendaftarkan taksonomi khusus bernama 'title', yang digunakan oleh jenis pos kustom saya 'sg-publications'. Mengikuti hierarki templat WP, saya membuat templat yang disebut taxonomy-title.phpyang menggunakan arg kueri default, dan sampai sekarang telah menunjukkan dengan benar setiap publikasi berdasarkan judulnya.

Ini adalah output dari $ queried_object dan $ wp_query-> request dalam templat itu:

[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 

Masalah yang saya lihat dalam kueri di atas tepat setelah WHERE 1=1, karena beberapa alasan ia mencari post_title = 'stroupe-scoop'. Ini tidak benar - itu adalah istilah siput taksonomi, bukan judul tulisan. Bahkan, ketika saya mengomentari baris itu dan menjalankannya terhadap database saya mendapatkan pengembalian yang tepat. Jadi apa yang menyebabkan WP menambahkan kondisi itu, ketika (saya berasumsi) itu tidak menambahkannya sebelum saya memutakhirkan ke 4.4?

Berikut adalah taksonomi-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();

Dan di functions.php saya memiliki filter kueri ini:

// 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
sumber
Di mana kode kueri? Jika ada di templat Anda, mengapa Anda tidak menghapus bagian yang merusaknya? Jika tidak - apa yang Anda gunakan untuk menghasilkan kueri?
montrealis
Tidak ada kode permintaan khusus, saya menggunakan loop default WP. Karena saya mengikuti Hirarki Templat, WP harus (dan sudah, sebelum memutakhirkan) menghasilkan parameter kueri yang benar untuk taksonomi saya.
Gary D
2
Apa isinya taxonomy-title.php? Apakah Anda melihat di tema functions.phpuntuk memeriksa apakah ada filter pada permintaan utama?
montrealist

Jawaban:

5

Saya tidak akan merekomendasikan menggunakan siput taksonomi yang bertepatan dengan variabel kueri publik, seperti title.

The title variabel permintaan diperkenalkan pada 4,4 jadi saya pikir yang bisa menjelaskan masalah Anda.

Periksa bagian dari WP_Querykelas:

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

Jadi ketika kita gunakan misalnya:

example.tld/?title=test

apa yang harus dilakukan WordPress di sini? Apakah ini pencarian taksonomi atau pencarian judul?

Jadi saya akan merekomendasikan awalan siput taksonomi kustom, misalnya

gary_title

untuk menghindari kemungkinan tabrakan nama.

Memperbarui:

Terima kasih kepada @ ocean90 untuk menunjukkan bahwa ini adalah bug, yang akan diperbaiki di 4.4.1

birgire
sumber
2
Terima kasih atas perubahan di 4.4 - Saya curiga ini mungkin konflik penamaan. Saya akan mengikuti begitu saya menjalankan beberapa tes.
Gary D
Sampai beberapa versi yang lalu, Anda tidak dapat mendaftarkan jenis posting code, karena itu membuat seluruh admin backend monospace. Nama generik selalu menjadi kandidat tabrakan. Di sisi lain, WordPress harus awalan internalnya sendiri.
fuxia
Ya itu saja. Setelah saya mengubah istilah taksonomi dan nama file terkait menjadi skema yang tidak bertentangan, semua muncul kembali. Terima kasih sekali lagi karena menunjukkan saya pada kode WP yang diperbarui.
Gary D
senang mendengarnya & berjalan lagi @GaryD
birgire
keren, saya sudah menguji bahwa ketika saya mendapatkan instalasi lama ;-) saya pasti akan mendukung tiket awalan itu, tapi saya tidak melihat itu akan terjadi dalam waktu dekat, sayangnya @toscho
birgire