如何在面包屑中显示特定的帖子类型名称

时间:2013-02-12 作者:Sasha

我有这个功能:

function the_breadcrumb() {
    if (!is_home()) {
        echo "Start » ";
        echo \'<a href="\';
        echo get_option(\'home\');
        echo \'">\';
        bloginfo(\'name\');
        echo "</a> » ";
        if (is_category() || is_single() ) {
        the_category(\'title_li=\');
        if (is_single()) {
            echo " » ";
            the_title();
        }
    } elseif (is_page()) {
        echo the_title();
    } elseif (is_single() && $post_type == \'partners\') {
        echo "IS THIS WORKING?";
            }
    } elseif (is_home()) {
    echo "Start » ";    bloginfo(\'name\');
    }
}
我还创建了一个名为“partners”的客户post类型。

但是,我的面包床不显示我的是此工作文本

感谢您的帮助。亚历克斯

2 个回复
SO网友:Tom J Nowell

这是一个典型的代码缩进失败,导致混淆问题。

如果我们正确地重新格式化您的代码,我们会看到:

function the_breadcrumb() {
    if (!is_home()) {
        echo "Start » ";
        echo \'<a href="\';
        echo get_option(\'home\');
        echo \'">\';
        bloginfo(\'name\');
        echo "</a> » ";
        if (is_category() || is_single() ) {
            the_category(\'title_li=\');
            if (is_single()) {
                echo " » ";
                the_title();
            }
        } elseif (is_page()) {
            echo the_title();
        } elseif (is_single() && $post_type == \'partners\') {
            echo "IS THIS WORKING?";
        }
    } elseif (is_home()) {
        echo "Start » ";    bloginfo(\'name\');
    }
}
现在我们可以适当地遵循它。正在发生的是它正在进入is_category || is_single() if语句,并首先执行该部分。因为if语句成功了,所以它以后永远不会到达您的支票。

但是,即使有,还有第二个问题,你正在检查$post_type, 但这是从哪里来的?没有任何地方将其声明为全局或指定值,它是从稀薄的空气中提取出来的。

因此,我的选择是:

function the_breadcrumb() {
    if (is_home()) {
        echo "Start » ";
        bloginfo(\'name\');
        return;
    }
    echo "Start » ";
    echo \'<a href="\'.home_url().\'">\';
    bloginfo(\'name\');
    echo "</a> » ";

    // Check each case starting with the most specific down to the most generic
    global $post;
    $post_type = \'\';
    if ( !empty( $post) {
        $post_type = $post->post_type;
    }
    if ( is_single() && $post_type == \'partners\' ) {
        echo "IS THIS WORKING?";
    } elseif ( is_page() ) {
        echo the_title();
    } else if (is_category() || is_single() ) {
        the_category(\'title_li=\');
        if (is_single()) {
            echo " » ";
            the_title();
        }
    }
}
在这里,我使用了全局post对象来解决缺少$post_type 变量进行比较。我还将if语句从最具体到最通用进行了重新排序。最后我在is_home 调用并将其放在顶部并返回,这样我们就不会嵌套太多的代码,它变得更可读,并且是一个很好的注释。我还使用home_url 而不是get_option(\'home\')

综上所述:

始终正确缩进。You have no excuses for not doing it, 大多数编辑器都会为您这样做。如果你的没有,那么去获取Sublimitext或其他IDE,比如Komodo或PHPStorm

SO网友:s_ha_dum

除了Tom J Nowell的回答之外。。。

您尚未设置$post_type 在任何地方该条件将始终失败,如果启用debugging 你可能会看到一些关于它的通知。

我不知道如何解决这个问题,因为代码脱离了上下文,我不知道您是否、在哪里或如何设置$post_type. 如果您将其定义为global 那么在什么地方global $post_type; 在职能部门的负责人应该这样做。也许你需要。。。

global $post;
$post_type = $post->post_type;
。。。但对于某些页面,如归档页面,这可能会有问题。N

对不起,我只能提供这些信息。

结束

相关推荐