Php WordPress:覆盖YoastSEO中的规范URL

Php WordPress:覆盖YoastSEO中的规范URL,php,wordpress,woocommerce,canonical-link,yoast,Php,Wordpress,Woocommerce,Canonical Link,Yoast,我正在使用一个片段覆盖WordPress/WooCommerce的YoastSEO中的规范URL。该片段基于官方文档示例: 这是我的密码: function prefix_filter_canonical_example( $canonical ) { if (is_shop() && is_paged() ) : $canonical = get_permalink(woocommerce_get_page_id( 'shop' )).'page

我正在使用一个片段覆盖WordPress/WooCommerce的YoastSEO中的规范URL。该片段基于官方文档示例:

这是我的密码:

function prefix_filter_canonical_example( $canonical ) {
 
    if (is_shop() && is_paged() ) :
 
        $canonical = get_permalink(woocommerce_get_page_id( 'shop' )).'page/'.get_query_var('paged').'/';
    
    elseif(WCV_Vendors::is_vendor_page()):
    
        $vendor_shop = urldecode( get_query_var( 'vendor_shop' ) );
        $vendor_id   = WCV_Vendors::get_vendor_id( $vendor_shop );
        $canonical  = WCV_Vendors::get_vendor_shop_page( $vendor_id );
    
    endif;
    
    return $canonical;
    
}   
add_filter( 'wpseo_canonical', 'prefix_filter_canonical_example' );
不管我返回什么内容,代码都不会对规范URL做任何事情。但是if/else工作正常,如果我回显
$canonical
的内容,我会看到正确的URL


我已经用基本的店面主题试过了,我几乎停用了所有的插件。但是这个片段不起作用。有什么我错过的吗?

如果你不给这个动作赋予任何优先级,wordpress将把它作为10。Yoast SEO还调用此过滤器来添加规范url,以便wordpress按照添加到操作中的顺序执行函数

所以改变这条线

add_filter( 'wpseo_canonical', 'prefix_filter_canonical_example' );
用这个

add_filter( 'wpseo_canonical', 'prefix_filter_canonical_example', 20 );

正如我所看到的,yoast筛选器的默认优先级为10,在您的add_filter()中,您没有按添加到操作中的顺序传递任何内容和wordpress执行的函数,因此可能将优先级添加到20将为您完成任务就是这样!我试过用10个,但现在用20个就行了!你能把这个作为答案吗?几周前我在你的个人资料上看到了你对SEO框架插件的推荐。我计划改变插件,但这可能是一个更大的任务。。。因此,我现在需要与Yoast合作:(