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;

}

提前致谢


茅侃侃
浏览 88回答 1
1回答

慕的地10843

我认为您的问题可能是$post_id没有正确定义或没有传递给回调。另请注意,wp_title自 WordPress 4.4 起已弃用,并且不适用于 5.4。无论如何,WordPress 有一个get_post_type()函数,可以简化事情。大多数 WordPress 功能不需要帖子 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);正如您在下面所说的,帖子标题已手动更新,并.co.uk在 Yoast SEO 片段标题中添加了附加内容。假设您有权访问数据库,纠正此问题的最佳方法是更新标题,完全消除问题,而不是尝试对其进行修复。Yoast 将其标题存储在postmetaWordPress 数据库的表中,键为_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。
打开App,查看更多内容
随时随地看视频慕课网APP