是否在wp_INSERT_POST触发后添加创建新帖子的操作?我认为这是在制造一种不为人知的循环

时间:2013-10-28 作者:Anagio

我需要从帖子中获取帖子元,并创建一个自定义帖子类型的帖子。我正在使用下面的代码,但我认为这是在创建一个无限循环。

当wp\\u insert\\u post激发时,我将执行create\\u cptpost函数,该函数将获取创建的post的PID$post_id 获取自定义字段ac_1 然后,我需要在cpt post类型中创建一个新的post,并更新post meta。还有别的方法吗?我基本上是在尝试将第一个普通帖子内容复制到一个新的自定义帖子类型帖子。

function create_mycpt( $post_id ) {

$post = get_post($post_id, ARRAY_A);

    if ( wp_is_post_revision( $post_id ) )
        return;


$ac1 = get_field(\'ac_1\',$post_id);

$my_post = array(
  \'post_title\'    => \'The title\',
  \'post_type\' => \'mycpt\'
);

$pid = wp_insert_post( $my_post );

update_post_meta($pid, \'ac_1\', $ac1);


}
add_action( \'wp_insert_post\', \'create_mycpt\' );

2 个回复
SO网友:Otto

是的,那将是一个无限循环。

为什么不让你的函数检查一下,确保这个帖子是你真正想要插入一个新的cpt帖子的,如果不是,就返回。您已经在检查修订。你也可以很容易地检查自己的类型。

SO网友:Tim Malone

有一种非常简单的方法可以避免创建这样的无限循环—在再次运行操作之前删除它,然后再重新添加它。

例如:

function create_mycpt( $post_id ) {

  // ... your earlier code here

  // directly before calling wp_insert_post, remove your action
  remove_action( \'wp_insert_post\', \'create_mycpt\');

  // run wp_insert_post as normal
  $pid = wp_insert_post( $my_post );

  // directly afterwards, add your action again in case there\'s a next time
  add_action( \'wp_insert_post, \'create_mycpt\');

  // ... the rest of your code here

}

add_action( \'wp_insert_post\', \'create_mycpt\' );
这将确保当您调用wp_insert_post() 函数,它不知道您的挂钩,因此不会产生无限循环。你可能不需要再添加一次,因为不太可能在同一个请求中插入第二篇帖子。然而,为了保持一致性,我们不妨再次添加它,因为它可能会发生!

结束

相关推荐