我需要从帖子中获取帖子元,并创建一个自定义帖子类型的帖子。我正在使用下面的代码,但我认为这是在创建一个无限循环。
当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\' );
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()
函数,它不知道您的挂钩,因此不会产生无限循环。你可能不需要再添加一次,因为不太可能在同一个请求中插入第二篇帖子。然而,为了保持一致性,我们不妨再次添加它,因为它可能会发生!