在我的<title>
我收到的标签undefined
在自定义帖子类型的自定义分类法上,我正在努力找到一种方法来设置它。
<title><br />
<b>Notice</b>: Undefined property: stdClass::$labels in <b>/www/public_html/lib/wp-includes/general-template.php</b> on line <b>658</b><br />
<br />
<b>Notice</b>: Trying to get property of non-object in <b>/www/public_html/lib/wp-includes/general-template.php</b> on line <b>658</b><br />
{custom_taxonomy_term} - {sitename}</title>
调用的URL为:
http://domain.com/{custom_post_type}/{custom_taxonomy}/{custom_taxonomy_term}/
为其提供服务的主题页是:archive-{custom_post_type}.php
它没有为存档页向我提供自定义的帖子类型,因此它会发出一个空白通知。不确定是否有办法强制执行,或者是否应该使用不同的主题页。我用它来过滤自定义帖子类型上的分类术语。
中的函数general-template.php
是post_type_archive_title
应用过滤器时post_type_archive_title
到$post_type_obj->labels->name;
这是未定义的部分。
我希望标题是{custom_term} - {custom_taxonomy} - {custom_post_type} - {sitename}
.
编辑:
在标题中。php我使用的是通常的<title><?php wp_title( \'\' ); ?></title>
并已禁用Wordpress SEO插件,但仍然存在相同问题。
对分类术语使用自定义重写rewrite => false
在register_taxonomy
:
add_rewrite_rule(
\'{custom_post_type}/{custom_taxonomy}/([^/]+)/?$\',
\'index.php?post_type={custom_post_type}&{custom_taxonomy}=$matches[1]\',
\'top\');
最合适的回答,由SO网友:Jimbo 整理而成
通过编写以下变通方法,我成功地修复了这个未定义的$标签。这是我希望它如何工作的习惯,但它可能会给其他人一个如何让它为他们工作的指针。当Wordpress可以使用两种类型为其页面提供服务并感到困惑时,就会出现这种情况。说明所提供的页面是否可以是归档页面或标记页面(当然是自定义页面)。现在还不确定该用哪种方式来满足这个请求,所以标题就被取消了。所以我告诉它:
add_action( \'parse_query\', \'my_custom_parse_query\' );
function my_custom_parse_query( $wp_query ) {
global $post_type_obj;
if ( $wp_query->is_post_type_archive && $wp_query->is_tax ) {
$term = \'\';
if( get_query_var(\'post_type\') == \'my_post_type_1\' ){
$tax1 = get_query_var(\'custom_tax1\');
$tax2 = get_query_var(\'custom_tax2\');
$tax3 = get_query_var(\'custom_tax3\');
if(!empty($tax1)){
$term = get_term_by( \'slug\', $tax1, \'custom_tax1\' );
}else if(!empty($tax2)){
$term = get_term_by( \'slug\', $tax2, \'custom_tax2\' );
}else if(!empty($tax3)){
$term = get_term_by( \'slug\', $tax3, \'custom_tax3\' );
}
if( !empty($term) ){
$post_type_obj = get_queried_object();
if (empty($post_type_obj->labels)) {
$post_type_obj->labels = new stdClass();
$post_type_obj->labels->name = $term->name . \' - \' . get_bloginfo(\'name\');
}
}
}else{
$post_type_obj = get_queried_object();
if (empty($post_type_obj->labels)) {
$post_type_obj->labels = new stdClass();
$post_type_obj->labels->name = $term->name;
}
}
}
}