php - WordPress:覆盖 YoastSEO 中的规范 URL
问题描述
我正在使用一个片段来覆盖 YoastSEO 中用于 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' );
无论我返回什么内容,该代码都不会对规范 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 );
推荐阅读
- qt - 如何在 QtCreator 中分析 PySide2 + QML?
- python - 如何根据日期的月份删除表行?
- javascript - Alexa Skill - 如何进行语音密码验证?
- ruby - 如何使用 String#between?使用 DateTime 对象在 Rails 中工作?
- java - Jib maven 插件如何在不使用 docker 守护进程的情况下构建图像?
- html - 网页抓取:如何在 HTML 节点中包含引号字符
- html - 在 Reactjs 中将 html 文件设置为“主页”
- c# - 如何从左侧菜单刷新页面
- mongodb - 尽管更新了 PATH,但“找不到命令:mongod”错误
- javascript - 如何将对象从 HTML 传递到 JavaScript