Truy vấn phân loại tùy chỉnh bị hỏng sau khi nâng cấp lên 4.4


9

Tôi mới nâng cấp từ 4.2 lên 4.4 và bây giờ truy vấn phân loại của tôi trở nên trống rỗng. Nó đã hoạt động tốt trước khi nâng cấp.

Tôi đã đăng ký một phân loại tùy chỉnh có tên 'title', được sử dụng bởi loại bài tùy chỉnh của tôi 'sg-publications'. Theo phân cấp mẫu WP, tôi đã tạo một mẫu được gọi là taxonomy-title.phpsử dụng truy vấn mặc định, và cho đến nay đã hiển thị chính xác từng ấn phẩm theo tiêu đề của nó.

Đây là đầu ra của yêu cầu $ queried_object và $ wp_query-> trong mẫu đó:

[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 

Vấn đề tôi thấy trong truy vấn trên là ngay sau đó WHERE 1=1, vì một số lý do nó đang tìm kiếm post_title = 'stroupe-scoop'. Điều này là không chính xác - đó là sên thuật ngữ phân loại, không phải tiêu đề của bài viết. Trong thực tế, khi tôi nhận xét dòng đó và chạy nó dựa trên cơ sở dữ liệu, tôi nhận được lợi nhuận phù hợp. Vậy điều gì khiến WP thêm điều kiện đó, khi (tôi giả sử) nó không thêm nó trước khi tôi nâng cấp lên 4.4?

Đây là phân loại-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();

Và trong hàm.php Tôi có bộ lọc truy vấn này:

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

Mã truy vấn ở đâu? Nếu nó có trong mẫu của bạn thì tại sao bạn không loại bỏ phần phá vỡ nó? Nếu không - bạn đã sử dụng gì để tạo truy vấn?
montrealist

Không có mã truy vấn tùy chỉnh, tôi đang sử dụng vòng lặp mặc định WP. Vì tôi đang theo Phân cấp mẫu, WP nên (và có, trước khi nâng cấp) tạo các tham số truy vấn chính xác cho phân loại của tôi.
Gary D

2
Nội dung của bạn là taxonomy-title.phpgì? Bạn có nhìn vào chủ đề functions.phpđể kiểm tra xem có bất kỳ bộ lọc nào trên truy vấn chính không?
montrealist

Câu trả lời:


5

Tôi không khuyên bạn nên sử dụng một con sên phân loại trùng với các biến truy vấn công khai, như title.

Biến title truy vấn được giới thiệu trong 4.4 nên tôi nghĩ điều đó có thể giải thích vấn đề của bạn.

Kiểm tra phần này của WP_Querylớp:

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

Vì vậy, khi chúng ta sử dụng ví dụ:

example.tld/?title=test

WordPress nên làm gì ở đây? Đây có phải là một truy vấn phân loại hoặc tìm kiếm tiêu đề?

Vì vậy, tôi sẽ khuyên bạn nên thêm tiền tố vào sên phân loại tùy chỉnh, vd

gary_title

để tránh va chạm tên có thể.

Cập nhật:

Cảm ơn @ Ocean90 đã chỉ ra rằng đây là một lỗi, sẽ được sửa trong 4.4.1


2
Cảm ơn những người đứng đầu về sự thay đổi trong 4.4 - Tôi đã có một nghi ngờ rằng nó có thể là một cuộc xung đột đặt tên. Tôi sẽ làm theo khi tôi chạy một vài bài kiểm tra.
Gary D

Cho đến một vài phiên bản trước, bạn không thể đăng ký một loại bài đăng code, bởi vì điều đó làm cho toàn bộ phần quản trị phụ trợ được quản lý. Tên chung luôn là ứng cử viên va chạm. Mặt khác, WordPress nên thêm tiền tố vào nội bộ của chính nó.
fuxia

Vâng, chính là nó. Khi tôi thay đổi thuật ngữ phân loại và tên tệp liên quan sang sơ đồ không xung đột, tất cả đã quay trở lại. Cảm ơn một lần nữa đã chỉ cho tôi mã WP được cập nhật.
Gary D

rất vui khi biết nó đã hoạt động trở lại @GaryD
birgire

mát mẻ, tôi đã phải kiểm tra rằng khi tôi nhận được bàn tay của tôi trên một tuổi cài đặt ;-) Tôi chắc chắn sẽ hỗ trợ mà vé tiền tố, nhưng tôi không thấy rằng trải qua trong tương lai gần, thật đáng buồn @toscho
birgire
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.