4.4로 업그레이드 한 후 사용자 정의 분류법 쿼리가 중단됨 1256

방금 4.2에서 4.4로 업그레이드했으며 이제 분류법 쿼리가 비어 있습니다. 업그레이드 전에 제대로 작동했습니다.

'title'내 사용자 정의 게시물 유형에 사용되는 이라는 사용자 정의 분류법을 등록했습니다 'sg-publications'. WP 템플릿 계층 구조에 taxonomy-title.php따라 기본 쿼리 인수를 사용 하는 템플릿을 만들었으며 지금까지는 제목별로 각 게시를 올바르게 표시했습니다.

해당 템플릿의 $ queried_object 및 $ wp_query-> request 출력은 다음과 같습니다.

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


답변

와 같은 공개 쿼리 변수와 일치하는 분류 슬러그를 사용하지 않는 것이 좋습니다 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

워드 프레스는 여기서 무엇을해야합니까? 분류법 쿼리 또는 제목 검색입니까?

따라서 맞춤 분류법 슬러그를 접두어로 사용 하는 것이 좋습니다.

gary_title

가능한 이름 충돌을 피하기 위해.

최신 정보:

이 버그 는 4.4.1에서 수정 될 것이라고 지적한 @ ocean90에게 감사합니다.