Get_the_title()打印两次

时间:2018-02-18 作者:Limpuls

我制作了一个脚本,检查当前查看的页面是否有父页面,如果有,则打印父标题和子标题。但如果没有父页面,我仍然会将当前查看页面的标题打印两次。怎么回事?我的代码:

<div class="entry-content">
        <?php
        if(get_the_title(get_top_ancestor_id())) {
                    echo get_the_title(get_top_ancestor_id());
                    echo get_the_title();
                } else {
                    echo get_the_title();
                }.....

function get_top_ancestor_id() {

    global $post;

    if($post->post_parent) {
        $ancestors = array_reverse(get_post_ancestors($post->ID));
        return $ancestors[0];
    }
    return $post->ID;
}

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

你的条件总是正确的。要了解原因,请考虑在没有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 如果您需要图像/链接/标题/等

结束

相关推荐

在样式表中使用PHP(可能是“.htaccess”问题?)

很抱歉,我问了一个(从我收集的信息中)相对频繁的问题,但我认为我已经把问题复杂化了,因为我离开了一个项目,然后在我的技能变得生疏之后再回来。因此,在我不久前为一位朋友创建的一个非常基本的主题中,我在样式表中使用PHP创建了一些变量,以便可以随机化某些元素的颜色。我实现这一点的方法是命名样式表style.php (与CSS相反),包括<?php header(\"Content-type: text/css; charset: UTF-8\"); ?> 在文件的顶部。这在当时效果很好,但自从我完