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


9

방금 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 );

쿼리 코드는 어디에 있습니까? 그것이 템플릿에 있다면 왜 그것을 깨뜨리는 부분을 제거하지 않습니까? 그렇지 않은 경우-쿼리를 생성하기 위해 무엇을 사용 했습니까?
몬트리올

커스텀 쿼리 코드가 없으며 WP 기본 루프를 사용하고 있습니다. 템플릿 계층 구조를 따르기 때문에 WP는 업그레이드 전에 내 분류 체계에 대한 올바른 쿼리 매개 변수를 생성해야합니다.
Gary D

2
당신의 내용은 무엇입니까 taxonomy-title.php? functions.php기본 검색어에 필터가 있는지 확인하기 위해 테마를 살펴 보셨습니까 ?
Montrealist

답변:


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

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

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

gary_title

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

최신 정보:

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


2
4.4의 변경 사항에 대해 진심으로 감사드립니다. 이름 충돌이 의심 될 수 있습니다. 몇 가지 테스트를 실행하면 따라하겠습니다.
게리 D

일부 버전 이전까지는 code전체 관리자 백엔드를 고정 폭으로 만들었 기 때문에 게시 유형을 등록 할 수 없었습니다 . 일반 이름은 항상 충돌 후보입니다. 반면, WordPress는 자체 내부를 접두사로 사용해야합니다.
fuxia

그렇습니다. 분류 용어와 관련 파일 이름을 충돌하지 않는 스키마로 변경하면 모두 다시 나타납니다. 업데이트 된 WP 코드를 알려 주셔서 다시 한 번 감사드립니다.
게리 D

@GaryD
birgire

쿨, 나는 이전 설치에 내 손을 얻을 때 테스트해야합니다 ;-) 나는 그 접두사 티켓을 확실히 지원할 것이지만 가까운 미래에 슬프게도 @toscho
birgire
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.