我正在尝试让两个插件一起工作,其中一个插件使用过滤功能在每个标题周围放置一个标签。我希望它排除另一个具有自定义post\\u类型(ai1ec\\u事件)的插件的帖子。但如果id错误,我无法获取帖子类型。
add_filter(\'the_title\', \'mealingua_title_filter\', 10);
function mealingua_title_filter($title) {
$post_id = get_the_ID();
#some stuff
if (is_front_page() OR is_single() OR is_page()) {
return \'<span class="mealingua_title_container_\' . $post_id . \' mealingua_title_container">\' . $title . \'</span>\';
} else {
return $title;
}
}
但是post\\u id在某些地方总是错误的。一个是顶部的nav\\U菜单。另一个是我想修复的插件。在那里,id始终是来自站点的最后一篇帖子之一。我尝试了以下替代方案,但没有成功:
global $post;
$post_id= $post->ID;
global $wp_query;
$post_id = $wp_query->post->ID;
我如何解决这个问题?我能做什么?我很愿意乱弄这两个插件的代码,但尽管我懂PHP,但我没有wordpress插件编码的经验。谢谢你的帮助。
最合适的回答,由SO网友:Jeroen Schmit 整理而成
您不能使用get_the_ID()
当您不在循环中时(例如在导航菜单中)。幸运的是the_title
过滤器在一个额外的参数中附带post ID。
将您的代码更改为此,以使其在所有位置都能工作:
function mealingua_title_filter($title, $post_id) {
#some stuff
if (is_front_page() OR is_single() OR is_page()) {
return \'<span class="mealingua_title_container_\' . $post_id . \' mealingua_title_container">\' . $title . \'</span>\';
} else {
return $title;
}
}
add_filter(\'the_title\', \'mealingua_title_filter\', 10, 2);