PHP函数编辑标题标签wordpress



由于管理错误,我的WordPress/woocommerce网站上的一些产品标题标签有两次.co.uk,例如"产品名称|mysite.co.uk.co.uk"。

我做了一些研究,我认为我需要使用PHP函数&使用str_replace进行筛选以解决此问题。这就是我到目前为止所拥有的。我哪里错了?我认为我得到标题并更改它而不是字符串替换本身是错误的。

add_filter( 'wp_title', 'custom_title', 10, 2 );
function custom_title( $title, $post_id ){
$post_type = get_post_field( 'post_type', $post_id, true );
if( $post_type == 'product' || $post_type == 'product_variation' ){
$title = get_the_title( $post_id );
$title = str_replace(" .co.uk", '', $title);
}
return $title;
}

提前感谢

我认为您的问题可能是$post_id没有正确定义或没有传递给回调。还要注意,wp_title从WordPress 4.4开始就被弃用了,并且不能与5.4一起使用。

在任何情况下,WordPress都有一个get_post_type((函数,它可以简化事情。大多数WordPress函数不需要post ID,它们将默认为全局$post对象。

add_filter('pre_get_document_title', function($title) {
$postType = get_post_type();
if( $postType === 'product' || $postType === 'product_variation') {
$title = str_replace(' .co.uk', '', get_the_title());
}
return $title;
}, 99);

正如您在下面所说,文章标题已经手动更新,Yoast SEO片段标题中添加了.co.uk

假设你可以访问数据库,纠正这种情况的最好方法是更新标题,完全消除问题,而不是试图在上面应用修复程序。

Yoast将其标题存储在WordPress数据库的postmeta表中,关键字为_yoast_wpseo_title。要替换这些标题中添加的所有.co.uk,可以运行以下查询:

UPDATE `database_name`.`postmeta`
SET meta_value = REPLACE(meta_value, ' .co.uk', '')
WHERE meta_key = '_yoast_wpseo_title'

请确保更改上面的查询,使database_name是WP数据库的正确名称,如果数据库表名上有前缀,请为postmeta设置正确的表名。

最新更新