แบบสอบถามอนุกรมวิธานที่กำหนดเองเสียไปหลังจากอัปเกรดเป็น 4.4


9

ฉันเพิ่งอัพเกรดจาก 4.2 เป็น 4.4 และตอนนี้แบบสอบถาม taxonomy ของฉันส่งคืนว่างเปล่า มันทำงานได้ดีก่อนการอัพเกรด

ฉันได้ลงทะเบียนอนุกรมวิธานที่กำหนดเองที่มีชื่อซึ่งจะถูกใช้โดยประเภทโพสต์ของฉันเอง'title' 'sg-publications'ตามลำดับชั้นของเทมเพลต WP ฉันสร้างเทมเพลตชื่อtaxonomy-title.phpซึ่งใช้ args คิวรีเริ่มต้นและจนถึงตอนนี้แสดงชื่อเรื่องของสิ่งพิมพ์แต่ละรายการอย่างถูกต้อง

นี่คือผลลัพธ์ของการร้องขอ $ queried_object และ $ wp_query-> ในเทมเพลตนั้น:

[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 

ปัญหาที่ฉันเห็นในแบบสอบถามดังกล่าวที่ถูกต้องหลังจากที่ด้วยเหตุผลบางอย่างมันคือการค้นหาWHERE 1=1 post_title = 'stroupe-scoop'นี่ไม่ถูกต้อง - นั่นคือกระสุนทับอนุกรมวิธานไม่ใช่ชื่อของโพสต์ ในความเป็นจริงเมื่อฉันแสดงความคิดเห็นออกบรรทัดนั้นและเรียกใช้กับฐานข้อมูลที่ฉันได้รับผลตอบแทนที่เหมาะสม ดังนั้นสิ่งที่ทำให้ WP เพิ่มเงื่อนไขนั้นเมื่อ (ฉันถือว่า) มันไม่ได้เพิ่มก่อนที่ฉันจะอัพเกรดเป็น 4.4

นี่คือ 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();

และใน functions.php ฉันมีตัวกรองแบบสอบถามนี้:

// 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 );

รหัสแบบสอบถามอยู่ที่ไหน ถ้าอยู่ในเทมเพลตของคุณทำไมคุณไม่ลองเอาส่วนที่แตกออกมาล่ะ ถ้าไม่ใช่ - คุณใช้อะไรในการสร้างแบบสอบถาม
montrealist

ไม่มีรหัสแบบสอบถามที่กำหนดเองฉันใช้วนรอบเริ่มต้น WP เนื่องจากฉันกำลังติดตามลำดับชั้นของแม่แบบ WP ควร (และมีก่อนที่จะอัปเกรด) ควรสร้างพารามิเตอร์คิวรีที่ถูกต้องสำหรับอนุกรมวิธานของฉัน
Gary D

2
เนื้อหาของคุณtaxonomy-title.phpคืออะไร? คุณดูในชุดรูปแบบfunctions.phpเพื่อตรวจสอบว่ามีตัวกรองในแบบสอบถามหลักหรือไม่?
มอนทาลิสต์

คำตอบ:


5

titleฉันจะไม่แนะนำให้ใช้กระสุนอนุกรมวิธานที่เกิดขึ้นพร้อมกับตัวแปรแบบสอบถามสาธารณะเช่น

title ตัวแปรแบบสอบถามเป็นที่รู้จักใน 4.4 ดังนั้นผมจึงคิดว่าสามารถอธิบายปัญหาของคุณ

ลองดูส่วนนี้ของWP_Queryชั้นเรียน:

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

ดังนั้นเมื่อเราใช้ตัวอย่าง:

example.tld/?title=test

WordPress ควรทำอะไรที่นี่? มันคือการสืบค้นอนุกรมวิธานหรือการค้นหาชื่อ?

ดังนั้นฉันจะแนะนำคำนำหน้าบุ้งอนุกรมวิธานที่กำหนดเองเช่น

gary_title

เพื่อหลีกเลี่ยงการชนชื่อที่เป็นไปได้

ปรับปรุง:

ขอบคุณ @ ocean90 ที่ชี้ให้เห็นว่านี่เป็นข้อผิดพลาดที่จะได้รับการแก้ไขใน 4.4.1


2
ขอบคุณสำหรับหัวขึ้นอยู่กับการเปลี่ยนแปลงใน 4.4 - ฉันสงสัยว่ามันอาจจะเป็นความขัดแย้งในการตั้งชื่อ ฉันจะทำตามเมื่อฉันทำการทดสอบสองสามครั้ง
Gary D

จนกระทั่งสองสามรุ่นที่ผ่านมาคุณไม่สามารถลงทะเบียนประเภทโพสต์codeได้ ชื่อสามัญมักเป็นตัวเลือกการชนกันของข้อมูล ในทางกลับกัน WordPress ควรใช้คำนำหน้าของตัวเอง
fuxia

ใช่นั่นแหละ เมื่อฉันเปลี่ยนเทอมอนุกรมวิธานและชื่อไฟล์ที่เกี่ยวข้องไปเป็นรูปแบบที่ไม่ขัดแย้งกันทั้งหมดก็กลับมา ขอขอบคุณอีกครั้งสำหรับการชี้ฉันไปที่รหัส WP ที่อัปเดตแล้ว
Gary D

ดีใจที่ได้ยินว่ามันทำงาน & อีกครั้ง @GaryD
birgire

เยี่ยมมากฉันต้องทดสอบว่าเมื่อฉันติดตั้งเก่า ;-) ฉันจะสนับสนุนตั๋วคำนำหน้านั้นอย่างแน่นอน แต่ฉันไม่เห็นว่าจะผ่านไปในอนาคตอันใกล้นี้เศร้า @toscho
birgire
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.