【问题标题】:Wordpress Yoast Breadcrumb code - Filter t change wrapper elementWordpress Yoast 面包屑代码 - 过滤器更改包装器元素
【发布时间】:2014-07-19 00:46:26
【问题描述】:

所以 Yoast SEO 插件在 Wordpress 中提供了一些方便的东西,其中之一是 Breadcrumb 功能,但是标记输出在跨度标签内(我为 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>

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

在“/plugins/wordpress-seo/frontend/class-breadcrumbs.php”的开头有一些代码,您可以在其中设置元素的包装器。

目前(减去 cmets 和不相关的代码):

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


    【解决方案1】:

    我相信我找到了解决方案——我的执行:

    functions.php

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

    然后我在主题中需要它的任何地方都调用get_breadcrumb()

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

    </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>
    

    【讨论】:

    • 这对我不起作用。最终在最后一个面包屑项目中得到了一堆杂散的&lt;/span&gt; 标签:
  • 我认为这会有效,因为 xmlns span 被封闭到早期。但是,如果没有深入评论,您可以通过在插件中调用适当的过滤器而不是将 html 粘贴到选项页面中来使其工作。
  • 这很聪明,适合我。您还可以添加过滤器来设置分隔符,这样用户就不会意外覆盖设置中的分隔符并破坏您的布局:add_filter( 'wpseo_breadcrumb_separator', function() { return '&lt;/li&gt;&lt;li&gt;'; }, 99);
  • 【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签