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

问题描述 投票:1回答:2

所以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插件时,它不会覆盖我的编辑。

在“/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;
    }
}

任何帮助将不胜感激。

wordpress function plugins filter breadcrumbs
2个回答
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>

0
投票

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

我确信有办法做到这一点 - 但没有帮助,我正在努力。

© www.soinside.com 2019 - 2024. All rights reserved.