방금 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
가능한 이름 충돌을 피하기 위해.