编辑Yoast SEO badcrumbs输出

时间:2013-02-26 作者:showFocus

我想定制Yoast SEO面包屑的输出,到目前为止,我有一个非常有效的方法:

add_filter( \'wpseo_breadcrumb_single_link\', \'ss_breadcrumb_single_link\', 10, 2 );
function ss_breadcrumb_single_link( $link_output, $link ) {
    $element = \'li\';
    $element = esc_attr( apply_filters( \'wpseo_breadcrumb_single_link_wrapper\', $element ) );
    $link_output = \'<\' . $element . \' typeof="v:Breadcrumb">\';
    if ( isset( $link[\'url\'] ) && ( $i < ( count( $links ) - 1 ) || $paged ) ) {
        $link_output .= \'<a href="\' . esc_url( $link[\'url\'] ) . \'" rel="v:url" property="v:title">\' . esc_html( $link[\'text\'] ) . \'</a>\';
    } else {
        if ( isset( $opt[\'breadcrumbs-boldlast\'] ) && $opt[\'breadcrumbs-boldlast\'] ) {
            $link_output .= \'<strong class="breadcrumb_last" property="v:title">\' . esc_html( $link[\'text\'] ) . \'</strong>\';
        } else {
            $link_output .= \'<li class="breadcrumb_last" property="v:title">\' . esc_html( $link[\'text\'] ) . \'</li>\';
        }
    }
    $link_output .= \'</\' . $element . \'>\';
    return $link_output;
}

add_filter( \'wpseo_breadcrumb_output_wrapper\', \'ss_breadcrumb_output_wrapper\', 10, 1 );
function ss_breadcrumb_output_wrapper( $wrapper ) {
    $wrapper = \'ol\';
    return $wrapper;
}
下一步是更改此行:

return apply_filters( \'wpseo_breadcrumb_output\', \'<\' . $wrapper . $id . $class . \' xmlns:v="http://rdf.data-vocabulary.org/#">\' . $output . \'</\' . $wrapper . \'>\' );
我想添加一个咏叹调元素aria-labelledby="breadcrumblabel" 到该输出。所以我设置了这个函数:

add_filter( \'wpseo_breadcrumb_output\', \'ss_breadcrumb_output\' );
function ss_breadcrumb_output() {
    return apply_filters( \'ss_breadcrumb_output\', \'<\' . $wrapper . $id . $class . \' xmlns:v="http://rdf.data-vocabulary.org/#">\' . $output . \'</\' . $wrapper . \'>\' );
}
我的问题是$wrapper $id $class$output 全部返回null。我想我知道为什么它们是空的,尽管作为一个PHP初学者,我无法解释它。

如果有人能给我指出正确的方向,这样我就能解决这个问题,我将不胜感激。

谢谢

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

它们都是空的。您尚未设置任何这些变量。这是您的函数。

function ss_breadcrumb_output() {
    return apply_filters( \'ss_breadcrumb_output\', \'<\' . $wrapper . $id . $class . \' xmlns:v="http://rdf.data-vocabulary.org/#">\' . $output . \'</\' . $wrapper . \'>\' );
}
该函数中的所有变量都与该函数隔离。在该函数外部设置的变量不起作用。由于您没有设置任何变量(在函数中),并且没有将它们传递到函数中,因此empty. It is a matter of scope. 这是有办法的,like globalization, 但这对这个问题并不重要,所以我让你自己决定。

但对于你的问题。。。看看过滤器where it is applied in the plugin.

return apply_filters( \'wpseo_breadcrumb_output\', \'<\' . $wrapper . $id . $class . \' xmlns:v="http://rdf.data-vocabulary.org/#">\' . $output . \'</\' . $wrapper . \'>\' );
我认为这可能是你的错误所在。这个--\'<\' . $wrapper . $id . $class . \' xmlns:v="http://rdf.data-vocabulary.org/#">\' . $output . \'</\' . $wrapper . \'>\'-- 都是一个参数。那个. 是字符串串联运算符,表示所有这些都合并到一个字符串中。当它被传递到过滤器时,就不再有变量了。它们作为简单字符串传递给过滤器。

如果添加如下参数,则函数可以捕获并操作该字符串:

function ss_breadcrumb_output($output) {
    var_dump($output); // you should see the string referred to above
    return apply_filters( \'ss_breadcrumb_output\', \'<\' . $wrapper . $id . $class . \' xmlns:v="http://rdf.data-vocabulary.org/#">\' . $output . \'</\' . $wrapper . \'>\' );
}
我对这一部分感到困惑:return apply_filters( \'ss_breadcrumb_output\', \'<\' . $wrapper . $id . $class . \' xmlns:v="http://rdf.data-vocabulary.org/#">\' . $output . \'</\' . $wrapper . \'>\' );

如果您试图将面包屑输出传递给另一个过滤器(我想是您创建的过滤器),您可能需要:

function ss_breadcrumb_output($output) {
    return apply_filters( \'ss_breadcrumb_output\', $output );
}
但为什么呢?任何你能做的事wpseo_breadcrumb_output 滤器

我想你只是想:

function ss_breadcrumb_output($output) {
    $output = preg_replace(\'/([^>]+)>(.*)/\',\'$1 aria-labelledby="breadcrumblabel" >$2\',$output);
    return $output;
}
我也不应该认为标记上的正则表达式是相当危险的。很容易出错。小心使用。

SO网友:sledgeweight

http://wpquestions.com/question/showChrono/id/8603

我使用str\\u replace的第一个函数

add_filter( \'wpseo_breadcrumb_output\', \'custom_wpseo_breadcrumb_output\' );
function custom_wpseo_breadcrumb_output( $output ){
    if( is_page() ){
        $from = \'<a href="">...</a>\';   // EDIT this to your needs  
        $to     = \'\';
        $output = str_replace( $from, $to, $output );
    }
    return $output;
}

结束

相关推荐

如何在WordPress附件页面(Image.php)中显示自定义域和父帖子ID

我试图用代码在WordPress附件页(image.php)中的循环外显示自定义字段,它不返回任何内容。这是我用来显示自定义字段的代码:<?php global $wp_query; $postid = $wp_query->post->ID; echo get_post_meta($postid, \'my-custom-field\', true); ?> 我正试图在附件页toowith中显示父帖子idget_the_id 并使用此代码