我正在向另一个CPT添加一个CPT动态。当使用wp_insert_post()
时,它会在我add_action('init', 'function_name');
时创建重复项。任何想法用于简单添加它们的钩子:
function cpt_to_cpt(){
// Grab posts
$args = array(
'post_type' => ' custom_type1 ',
'order' => 'ASC',
'post_status' => 'publish',
'numberposts' => -1,
);
$posts = get_posts($args);
foreach ( $posts as $post ) {
wp_insert_post(array(
'post_type' => 'custom_type2',
'post_title' => $post->post_title,
'post_date' => $post->post_date,
'post_author' => $post->post->author,
'post_status' => 'publish',
)
);
}
add_action('init', 'cpt_to_cpt');
答案 0 :(得分:1)
答案 1 :(得分:0)
WordPress init
和wp_loaded
在“加载”阶段引起轰动。这意味着刷新页面时它们都可以触发多次。
解决方案1
您可以使用另一个稍后触发的钩子。
例如, wp
挂钩会在“处理”阶段触发,并且只能运行一次。
add_action('wp', 'cpt_to_cpt');
优先顺序:init
wp_loaded
wp
解决方案2
如果您确实要使用init
钩子并确保它将运行一次。您可以使用下面的代码段。
function cpt_to_cpt() {
$runtime = 'run_only_01;
if (get_option('my_run_only_once_option') != $runtime) {
$updated = update_option('my_run_only_once_option', $runtime);
if ($updated === true) {
// do some stuff
}
}
}
add_action('init', 'cpt_to_cpt');
它将在您的wp_option
表上创建一个选项。最后,您需要手动(在数据库中)或在代码中删除该选项。
delete_option('my_run_only_once_option');
解决方案3
也许创建多个帖子或CPT(自定义帖子类型)的最佳专业解决方案应该使用wp-cli
(WordPress的命令行界面)。
请在此处查看文档:{{3}}