Wordpress Yoast面包屑代码 - 过滤t更改包装元素

时间:2014-05-29 13:30:57

标签: wordpress function plugins filter breadcrumbs

所以Yoast SEO插件在Wordpress中提供了一些方便的东西,其中一个是Breadcrumb功能,但是标记输出在span标签内(我为URL添加了# - 不用担心)...

<span xmlns:v="http://rdf.data-vocabulary.org/#">
    <span typeof="v:Breadcrumb">
        <a property="v:title" rel="v:url" href="#">Home</a>
    </span>
    <span typeof="v:Breadcrumb">
        <a property="v:title" rel="v:url" href="#">Our Services</a>
    </span>
    <span typeof="v:Breadcrumb">
        <a property="v:title" rel="v:url" href="#">GP Services</a>
    </span>
    <span typeof="v:Breadcrumb">
        <span property="v:title" class="breadcrumb_last">GP Appointments</span>
    </span>
</span>

我想输出breadrcumbs作为列表而不是这些跨度 - 所以最终我想我需要在我的functions.php文件中添加某种过滤器 - 所以当我更新Yoast SEO插件时它没有覆盖我的编辑。

在&#34; /plugins/wordpress-seo/frontend/class-breadcrumbs.php"在开头有一些代码可以设置元素的包装。

目前(减去评论和不相关的代码位):

if ( ! class_exists( 'WPSEO_Breadcrumbs' ) ) {

    class WPSEO_Breadcrumbs {

        private $element = 'span';

所以这是我需要用我主题的functions.php文件覆盖的部分。

我为了如何做到这一点而努力争取标记。

此插件文件中似乎也有一个过滤器:

private function filter_wrapper() {
    $wrapper = apply_filters( 'wpseo_breadcrumb_output_wrapper', $this->wrapper );
    $wrapper = tag_escape( $wrapper );
    if ( is_string( $wrapper ) && '' !== $wrapper ) {
        $this->wrapper = $wrapper;
    }
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我相信我找到了一个解决方案 - 我的执行:

的functions.php

function get_breadcrumb() {
    if ( function_exists('yoast_breadcrumb') ) {
        yoast_breadcrumb('<ol class="article__bread-crumb"><li>','</li></ol>');
    }
}

然后我在主题中的任何地方打电话给get_breadcrumb()

然后在yoast设置中,将“breadcrumbs之间的分隔符”选项设置为:

</li><li>

结果代码应该像这样结束:

<ol class="article__bread-crumb">
    <li>
        <span xmlns:v="http://rdf.data-vocabulary.org/#">
            <span typeof="v:Breadcrumb">
                <a href="[URL]/velonews" rel="v:url" property="v:title">Home</a>
            </span>
        </span>
    </li>
    <li>
        <span rel="v:child" typeof="v:Breadcrumb">
            <a href="[URL]/velonews/all" rel="v:url" property="v:title">All</a>
        </span>
    </li>
    <li>
        <span rel="v:child" typeof="v:Breadcrumb">
            <a href="[URL]/velonews/category/news" rel="v:url" property="v:title">News</a>
        </span>
    </li>
    <li>
        <span class="breadcrumb_last">Related Test</span>
    </li>
</ol>

答案 1 :(得分:0)

我没有找到一种简单的方法来做到这一点,所以我最后只是改变我的CSS样式来解释这样一个事实:元素不是无序列表,而是嵌套的跨度和链接 - 而不是结束可悲的是,这个世界,以及各种各样的解决方案,但并不是我想到的解决方案。

我确定有办法做到这一点 - 但如果没有帮助,我会挣扎。