如何将自定义Yoast SEO标题写入数据库并在后台Yoast区域显示?
解决Yoast SEO标题同步到数据库并在后台显示的问题
要让自定义生成的标题不仅在前端生效,还能写入Yoast的数据库字段、在后台编辑页显示并触发Yoast分析,需要直接操作Yoast存储SEO标题的post meta字段,同时设置同步触发机制。
核心思路
Yoast SEO的页面标题存储在文章的meta字段_yoast_wpseo_title中,我们需要将Jet Engine选项里的自定义标题同步到这个字段,同时确保自定义选项更新时自动同步,后台编辑页能正确读取最新值。
具体实现代码
将以下代码添加到主题的functions.php中:
同步自定义标题到Yoast数据库字段
这个函数负责把Jet Engine选项中的标题写入首页的Yoast meta字段:function sync_homepage_yoast_title() { $homepage_id = get_option('page_on_front'); if (empty($homepage_id)) return; // 获取自定义SEO标题 $custom_title = jet_engine()->listings->data->get_option('pwp-options::seo-titel-homepage'); if (empty($custom_title)) { // 若自定义标题为空,删除Yoast的meta字段(可选,也可留空) delete_post_meta($homepage_id, '_yoast_wpseo_title'); return; } // 更新Yoast的标题存储字段 update_post_meta($homepage_id, '_yoast_wpseo_title', $custom_title); }设置同步触发时机
当自定义选项更新时自动同步,添加以下钩子:// 监听自定义选项更新事件,触发同步 add_action('update_option_pwp-options::seo-titel-homepage', 'sync_homepage_yoast_title', 10, 3);如果上面的选项监听钩子不生效(比如Jet Engine的选项命名规则特殊),可以改用后台初始化时同步(适合选项不频繁更新的场景):
// 后台每次加载时同步标题 add_action('admin_init', 'sync_homepage_yoast_title');确保后台编辑页显示自定义标题
为了防止后台Yoast编辑框读取旧值,添加过滤钩子强制显示自定义标题:function filter_yoast_backend_title($title, $post) { $homepage_id = get_option('page_on_front'); if ($post->ID == $homepage_id) { $custom_title = jet_engine()->listings->data->get_option('pwp-options::seo-titel-homepage'); if (!empty($custom_title)) { return $custom_title; } } return $title; } add_filter('wpseo_title_edit_box', 'filter_yoast_backend_title', 10, 2);
说明
- 执行后,首页的Yoast SEO编辑区域会显示自定义生成的标题,谷歌预览和SEO分析功能也会正常生效。
- 原来的
wpseo_title过滤函数可以保留,作为 fallback 确保前端显示正确,也可以删除(因为meta字段已经同步,Yoast会自动读取)。
内容的提问来源于stack exchange,提问作者user3611459
相关产品推荐
相关产品推荐

