如何在前端删除自定义文章类型后重定向至首页?
解决自定义文章删除后重定向到首页的问题
你的代码存在两个潜在问题:一是函数名wp_delete_post_link和WordPress内置函数重名,会引发冲突;二是删除链接未指定重定向目标,导致默认跳转路径出错出现404。以下是具体改进方案:
方法一:修改删除链接,直接指定重定向地址
替换你原有的删除链接函数和短代码,加入权限检查和重定向参数:
// 自定义删除链接函数(改名避免和内置函数冲突) function custom_delete_post_link($link_text = 'Delete Post', $before = '', $after = '') { global $post; // 检查当前用户是否有权限删除该文章 if (!current_user_can('delete_post', $post->ID)) { return; } // 构造带重定向参数的删除链接 $delete_url = add_query_arg([ 'action' => 'delete', 'post' => $post->ID, 'redirect_to' => urlencode(home_url()) // 重定向到首页 ], admin_url('post.php')); // 添加安全验证nonce $delete_url = wp_nonce_url($delete_url, 'delete-post_' . $post->ID); echo $before . '<a href="' . esc_url($delete_url) . '">' . esc_html($link_text) . '</a>' . $after; } // 短代码函数 function wpc_elementor_delete_shortcode($atts) { ob_start(); custom_delete_post_link(); return ob_get_clean(); } add_shortcode('my_delete_shortcode', 'wpc_elementor_delete_shortcode');
关键改进点:
- 函数改名避免冲突:将
wp_delete_post_link改为custom_delete_post_link,防止覆盖WordPress内置函数 - 添加权限检查:确保只有有权限的用户才能看到删除按钮
- 用
add_query_arg和admin_url构造链接:更规范安全,避免硬编码路径 - 加入
redirect_to参数:指定删除后跳转到首页,用urlencode处理URL编码 - 短代码用输出缓冲:避免直接echo导致内容位置错误
方法二:用钩子强制重定向(适合所有删除场景)
如果希望不管删除链接怎么生成,只要删除指定自定义文章就跳转到首页,可以添加以下钩子到functions.php:
add_action('admin_action_delete', 'custom_delete_redirect_to_home'); function custom_delete_redirect_to_home() { global $post; // 替换成你的自定义文章类型slug if ($post->post_type === 'your_custom_post_type') { wp_redirect(home_url()); exit; } }
注意:
- 将
your_custom_post_type替换为你实际使用的自定义文章类型标识 - 若只想针对前端删除生效,可额外判断
!is_admin(),但需确保删除请求的权限验证逻辑完整
内容的提问来源于stack exchange,提问作者Alex Black
相关产品推荐
相关产品推荐

