当我这样做时:
function append_album_review_to_title( $title ) {
global $post;
if ( get_post_type( $post->ID ) == \'album_review\' && in_the_loop() ){
return \'Album Review: \' . $title;
} else {
return $title;
}
}
add_filter(\'the_title\', \'append_album_review_to_title\');
标题已正确添加到,但仅在查看实际页面时。当我不通过删除&& in_the_loop()
, 它正确地为我用来将我发布的帖子自动共享到Twitter的插件输出的标题加上前缀。然而,问题是,如果我不测试循环,字符串也会在每个nav菜单项名称的前面
我可以使用哪些条件语句来测试导航菜单项并在筛选器中跳过它们?
更新1谢谢Ittikorn。我试过了,但没用。我可以看到它正在改变<title>
但不幸的是,共享插件的输出仍然是原来的标题。
非常感谢更新2,虽然如果我能做出更详细、更有见地的回答,两人都会得到我真正的支持,但不幸的是,Sumit或Peter提供的解决方案都不起作用。
Sumit的解决方案的工作原理是,它没有通过对导航菜单项应用过滤器来不必要地破坏导航菜单项,但它也没有将过滤器应用于屏幕后自动社交共享插件,这正是我所需要的。
Peter的解决方案也不起作用,与Sumit的解决方案完全相同。我尝试过使用它,但无法将其定位为in\\u the\\u循环和社交共享插件的帖子标题,但无法用于nav菜单项。
彼得和苏米特的答案确实给了我极大的帮助,并最终让我找到了解决方案。
尝试这两种答案时,我注意到,在后端,插件会返回“缺少参数2”和“注意:尝试获取非对象的属性…”之类的警告,因此我想到,与前端(导航菜单和循环)不同,在后端,显然是$id
未传递给the_title
所以我可以用它作为条件。
这段代码完成了我所需要的(即,在循环中修改帖子标题,不修改导航菜单项,以及修改the_title
供后端社交共享插件使用):
function append_album_review_to_title( $title, $id = NULL ) {
if ($id) {
if ( get_post_type( $id ) == \'album_review\' ){
return \'Album Review: \' . $title;
} else {
return $title;
}
} else {
return \'Album Review: \' . $title;
};
}
add_filter(\'the_title\', \'append_album_review_to_title\', 10, 2);
如果您认为我可以以某种方式改进,或者如果无人参与,这可能会导致未来的问题,请告诉我。谢谢你的帮助。