WordPress:覆盖 YoastSEO 中的规范 URL

Cra*_*ray 3 php wordpress canonical-link woocommerce yoast

我正在使用代码片段覆盖 YoastSEO for WordPress/WooCommerce 中的规范 URL。该片段基于官方文档示例:https ://developer.yoast.com/features/seo-tags/canonical-urls/api/

这是我的代码:

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' );
Run Code Online (Sandbox Code Playgroud)

无论我返回什么内容,代码都不会对规范 URL 执行任何操作。但 if/else 工作正常,如果我回显内容,$canonical我会看到正确的 URL。

我已经尝试过基本的店面主题,并且停用了几乎所有插件。但该片段不起作用。有什么我想念的吗?

小智 6

如果您没有向操作传递任何优先级,wordpress 会将其视为 10。Yoast SEO 还调用此过滤器来添加规范 url,以便 WordPress 按照添加到操作的顺序执行函数。

所以改变这一行

add_filter( 'wpseo_canonical', 'prefix_filter_canonical_example' );
Run Code Online (Sandbox Code Playgroud)

有了这个

add_filter( 'wpseo_canonical', 'prefix_filter_canonical_example', 20 );
Run Code Online (Sandbox Code Playgroud)