如何修复WordPress后台自定义分类法术语默认关联错误文章类型的问题
如何修复WordPress后台自定义分类法术语默认关联错误文章类型的问题
这个问题我之前踩过坑!核心原因确实如你所想:WordPress的edit.php页面如果没有在URL参数里指定post_type,就会默认使用内置的post类型来加载内容。下面给你两个实用的解决办法,按需选择:
方案1:通过请求拦截自动修正post_type(推荐)
这个方案不需要修改任何链接,而是在WordPress解析后台请求时自动补全正确的post_type参数,哪怕用户手动输入不带post_type的URL也能生效。
添加以下代码到你的插件文件中:
add_action( 'parse_request', 'fix_domain_taxonomy_post_type_in_admin' ); function fix_domain_taxonomy_post_type_in_admin( $wp ) { // 仅针对后台的edit.php页面生效 if ( is_admin() && $wp->request === 'edit.php' ) { // 检查URL中存在domain分类参数,但未指定post_type if ( isset( $_GET['domain'] ) && ! isset( $_GET['post_type'] ) ) { // 强制设置post_type为自定义文章类型model $_GET['post_type'] = 'model'; // 同步修正WP的查询变量,确保系统正确识别 $wp->query_vars['post_type'] = 'model'; } } }
方案2:修改分类术语列表的链接,默认带上post_type参数
如果你更倾向于从源头修改链接,让后台生成的URL直接包含正确的post_type参数,可以使用WordPress提供的过滤器(WordPress 5.8+适用):
add_filter( 'term_edit_posts_link_query_args', 'add_post_type_to_domain_term_links', 10, 2 ); function add_post_type_to_domain_term_links( $args, $term ) { // 仅针对domain分类法的术语链接生效 if ( $term->taxonomy === 'domain' ) { // 追加post_type参数为model $args['post_type'] = 'model'; } return $args; }
兼容旧版WordPress(低于5.8)
如果你的WordPress版本比较旧,term_edit_posts_link_query_args过滤器不存在,可以用更通用的admin_url过滤器来修改链接:
add_filter( 'admin_url', 'modify_domain_admin_links', 10, 3 ); function modify_domain_admin_links( $url, $path, $blog_id ) { // 仅处理edit.php链接且包含domain参数的情况 if ( strpos( $path, 'edit.php' ) !== false && strpos( $url, 'domain=' ) !== false ) { // 如果链接中没有post_type参数,就自动添加 if ( strpos( $url, 'post_type=' ) === false ) { $url = add_query_arg( 'post_type', 'model', $url ); } } return $url; }
小提示
两个方案对比:方案1更健壮,覆盖了所有可能的请求场景(包括用户手动输入URL);方案2只修改后台生成的链接,对用户手动输入的无效。根据你的实际需求选择即可~
备注:内容来源于stack exchange,提问作者Asier Pabolleta Martorell
相关产品推荐
相关产品推荐

