WP后台:将自定义文章类型归档纳入链接搜索结果
解决WordPress编辑器链接搜索包含自定义文章类型归档的问题
嘿,我完全懂你的需求——在编辑器里添加链接时,能直接搜索到自定义文章类型(比如你说的members)的归档页面,不用手动输入链接,这个体验确实要友好太多了!
首先得说,你之前用的pre_get_posts钩子确实不对,这个钩子主要是用来修改前台或者后台的文章列表查询,而编辑器里的链接搜索是独立的AJAX请求,得用专门的过滤器来处理。
正确的钩子是wp_link_query,它专门负责修改编辑器链接搜索的结果集。下面是可以直接用的代码示例:
function include_cpt_archives_in_link_search( $results, $query ) { // 确认是编辑器的链接搜索AJAX请求 if ( ! empty( $query['s'] ) && isset( $query['action'] ) && $query['action'] === 'wp-link-ajax' ) { // 这里列出你想要加入搜索的自定义文章类型slug $target_cpts = array( 'members', 'services' ); foreach ( $target_cpts as $cpt_slug ) { // 检查搜索关键词是否匹配CPT的slug或者名称(这里用不区分大小写的匹配) $cpt_object = get_post_type_object( $cpt_slug ); $cpt_name = $cpt_object->labels->name; if ( stripos( $cpt_slug, $query['s'] ) !== false || stripos( $cpt_name, $query['s'] ) !== false ) { // 获取该CPT的归档链接 $archive_url = get_post_type_archive_link( $cpt_slug ); if ( $archive_url ) { // 将归档页面添加到搜索结果中 $results[] = array( 'title' => $cpt_name . ' 归档', 'permalink' => $archive_url, 'info' => '自定义文章类型归档页面', ); } } } } return $results; } add_filter( 'wp_link_query', 'include_cpt_archives_in_link_search', 10, 2 );
代码说明:
- 首先判断当前请求是否是编辑器的链接搜索AJAX请求,避免影响其他查询
- 遍历你指定的自定义文章类型,同时匹配slug和显示名称,这样用户搜“会员”或者“members”都能找到归档
- 用
get_post_type_archive_link()获取归档链接,确保链接的正确性 - 把归档页面的信息添加到搜索结果数组,会在编辑器的搜索弹窗里显示
额外优化建议:
如果你想自动包含所有公开的自定义文章类型,不用手动列slug,可以把$target_cpts替换成:
$target_cpts = get_post_types( array( 'public' => true, '_builtin' => false, ), 'names' );
这样所有你创建的公开自定义文章类型的归档页面,都会自动出现在链接搜索结果里啦!
内容的提问来源于stack exchange,提问作者lukeseager
相关产品推荐
相关产品推荐

