你的条件总是正确的。要了解原因,请考虑在没有post parent时此函数中会发生什么:
function get_top_ancestor_id() {
global $post;
// no parent so this doesn\'t run:
// if($post->post_parent) {
// $ancestors = array_reverse(get_post_ancestors($post->ID));
// return $ancestors[0];
// }
return $post->ID;
}
简化为:
function get_top_ancestor_id() {
global $post;
return $post->ID;
}
因此,如果没有父帖子,它将返回当前帖子的ID,这意味着您的调用简化为:
echo get_the_title();
echo get_the_title();
我的建议是改变
get_top_ancestor_id
这样它就会回来
false
, 或使用此代码:
global $post;
if( $post->post_parent ) {
echo get_the_title(get_top_ancestor_id());
}
echo get_the_title();
安全性此代码不会逃逸其输出!如果管理员副本将带有危险代码的脚本标记粘贴到帖子标题中,它将在浏览器中呈现!
让我们用esc_html
:
global $post;
if( $post->post_parent ) {
echo esc_html( get_the_title(get_top_ancestor_id()) );
}
echo esc_html( get_the_title() );
代码现在是安全的,任何危险内容都会被破坏,从而阻止其执行。同样,使用
esc_attr
对于属性,
esc_url
对于URL,以及
wp_kses_post
如果您需要图像/链接/标题/等