WordPress选择Poetry分类插入新文章时修改post-name的单次触发钩子函数
WordPress新文章首次发布时修改slug的钩子选择
要实现仅在首次发布新文章时触发一次的逻辑,最合适的钩子是wp_insert_post。这个钩子在文章被插入或更新时触发,通过其参数可以精准控制仅处理首次发布的新文章,同时满足你修改Poetry分类文章slug的需求。
实现代码示例
add_action('wp_insert_post', 'set_poetry_random_slug', 10, 3); function set_poetry_random_slug($post_id, $post, $update) { // 跳过自动保存、修订版,仅处理已发布的文章 if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id) || $post->post_status !== 'publish') { return; } // 仅处理新增文章,跳过已有文章的更新操作 if ($update) { return; } // 检查文章是否属于Poetry分类(替换为你的分类slug/ID) $target_category = 'poetry'; if (!has_category($target_category, $post_id)) { return; } // 生成7位随机数字slug $random_slug = mt_rand(1000000, 9999999); // 临时移除钩子避免无限循环,更新文章slug remove_action('wp_insert_post', 'set_poetry_random_slug', 10); wp_update_post([ 'ID' => $post_id, 'post_name' => $random_slug ]); add_action('wp_insert_post', 'set_poetry_random_slug', 10, 3); }
关键说明
wp_insert_post的第三个参数$update为false时,表示这是一篇新插入的文章,以此确保逻辑仅触发一次。- 加入自动保存、修订版的判断,避免钩子在草稿自动保存等场景下误触发。
- 通过
has_category校验文章分类,只对Poetry分类的文章生效。 - 修改slug时临时移除钩子,防止
wp_update_post再次触发wp_insert_post造成无限循环。
内容的提问来源于stack exchange,提问作者Ghost
相关产品推荐
相关产品推荐

