经典编辑器链接弹窗重复添加自定义CPT链接问题
解决经典编辑器链接搜索中自定义CPT条目重复追加的问题
问题核心:当自定义CPT(自定义文章类型)集成到经典编辑器链接搜索后,滚动触发Ajax加载时,自定义条目会被重复追加到结果列表,而默认文章/页面无此问题。原因是wp_link_query过滤器每次Ajax请求都会执行,当前代码直接追加条目而未做去重处理,而默认内容由WordPress内部查询自动处理了分页与去重。
解决方法:添加ID去重逻辑
在向$results数组追加自定义CPT条目之前,先检查该条目ID是否已存在于现有结果中,仅添加未存在的条目:
add_filter('wp_link_query', array($this, 'wp_link_query'), 10, 2); public function wp_link_query($results, $query) { // 提取现有结果中的所有ID,用于去重判断 $existing_ids = array_column($results, 'ID'); // 自定义CPT查询,匹配搜索关键词与默认分页规则 $custom_posts = get_posts(array( 'post_type' => 'your_cpt_slug', // 替换为你的自定义文章类型slug 's' => $query['s'], 'posts_per_page' => isset($query['posts_per_page']) ? $query['posts_per_page'] : 20, 'post_status' => 'publish', 'paged' => isset($query['paged']) ? $query['paged'] : 1 )); foreach ($custom_posts as $post) { $post_id = $post->ID; // 仅ID未存在时才追加条目 if (!in_array($post_id, $existing_ids)) { $results[] = array( 'ID' => $post_id, 'title' => esc_html($post->post_title), 'permalink' => get_permalink($post), 'info' => __('自定义文章类型', 'your-text-domain') // 自定义显示的条目描述 ); // 更新现有ID数组,避免同一次请求内重复添加 $existing_ids[] = $post_id; } } return $results; }
关键说明
- 去重逻辑:通过
array_column提取现有结果的ID数组,用in_array判断是否已存在,确保每个ID只被添加一次。 - 同步查询参数:自定义CPT查询使用
$query中的s(搜索关键词)、posts_per_page、paged参数,与WordPress默认链接搜索的分页、搜索逻辑保持一致,避免加载重复的分页内容。 - 避免同请求重复:每次添加条目后更新
$existing_ids,防止同一次请求内因循环逻辑重复添加相同条目。
内容的提问来源于stack exchange,提问作者root66
相关产品推荐
相关产品推荐

