嗨,我和the_title
过滤器我有以下代码:
function zen_title_filter($title){
if(is_singular()){
if(!empty($_GET[\'asin\'])){
if($title == \'Product Details Page\' || $title == \'Compare Products Page\'){
$title = zen_get_titles();
}
}
}
return $title;
}
add_filter(\'the_title\', \'zen_title_filter\');
如您所见,此过滤器会更新“产品详细信息”页面和“比较产品”页面的菜单标题。但我所期望的行为是,它应该只更新帖子本身的标题,而不更新菜单标题,在这种情况下,菜单标题也与帖子标题相同。有什么想法吗?
UPDATE
实际上,我正在动态生成页面。使用页面作为模板。因此,post id就是页面的id。我所做的是向内容添加过滤器,并使用新内容完全替换页面的内容:
add_filter(\'the_content\', function($content){
if(is_page(\'compare\')){
$asin = esc_attr($_GET[\'asin\']);
$data = get_data($asin);
$smarty->assign(\'item_data\', $data);
$content = $smarty->fetch(\'file.tpl\');
}
return $content;
});
最合适的回答,由SO网友:Andy Adams 整理而成
由于您正在动态生成内容,我们可以使用全局标志来告知我们何时需要应用标题。
add_filter(\'the_content\', function($content){
if(is_page(\'compare\')){
global $asin_doing_template;
// mark that we\'re doing a template
$asin_doing_template = true;
$asin = esc_attr($_GET[\'asin\']);
$data = get_data($asin);
$smarty->assign(\'item_data\', $data);
$content = $smarty->fetch(\'file.tpl\');
// set it back to false
$asin_doing_template = false;
}
return $content;
});
function zen_title_filter( $title ){
global $asin_doing_template;
if( is_singular() && $asin_doing_template ){
if( $title == \'Product Details Page\' || $title == \'Compare Products Page\' ){
$title = zen_get_titles();
}
}
return $title;
}
add_filter( \'the_title\', \'zen_title_filter\' );
如果这样做了,请告诉我!