代码之家  ›  专栏  ›  技术社区  ›  webdev_wp

使用wp\u insert\u post()-创建重复项

  •  1
  • webdev_wp  · 技术社区  · 7 年前

    我正在动态地将一个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');
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Michael Doye Björn Kaiser    7 年前

    尝试使用:

    wp_loaded

    add_action('wp_loaded', 'cpt_to_cpt');
    

    wp

    add_action('wp', 'cpt_to_cpt')
    
        2
  •  0
  •   Thiago Santos    6 年前

    文字出版社 init wp_loaded 吊钩在“装载”阶段着火。这意味着它们在刷新页面时可以触发多次。

    解决方案1

    你可以使用另一个稍后开火的钩子。

    wp 例如,hook在“处理”阶段启动,并且应该只运行一次。

    add_action('wp', 'cpt_to_cpt');
    

    优先顺序: 初始化 🠆 wp_加载 🠆 可湿性粉剂

    解决方案2

    如果你真的想使用 初始化 钩住并确保它将运行一次。您可以使用下面的代码段。

    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的命令行界面)。

    请查看以下文档: https://developer.wordpress.org/cli/commands/post/