在自定义元框中使用wp_ins_post

时间:2013-10-25 作者:RiotAct

这是一种独特的情况。我有一个开票自定义帖子类型,当它标记为“paid”时,我想生成另一个自定义帖子类型。我有一个处理发票元的自定义元文件,我正在尝试使此功能正常工作。目前,它确实有效,但它创建了无限多的新帖子,所有帖子都具有相同的标题等等。我必须迅速停止该页面,它已经有近1000篇帖子了。这是我当前的函数,希望有人能看到我做错了什么。当我在某个地方读到可以消除循环的内容时,我确实尝试将该帖子添加为未来的帖子。。。不起作用。

// Generate CEU if payment is entered manually
function generate_ceu( $post_id ){
// check nonce
if (!isset($_POST[\'invoice_meta_box_nonce\']) || !wp_verify_nonce($_POST[\'invoice_meta_box_nonce\'], \'invoice_meta_box\')) {
    return $post_id;
}

// check capabilities
if (\'invoice\' == $_POST[\'post_type\']) {
    if (!current_user_can(\'edit_post\', $post_id)) {
        return $post_id;
    }
} elseif (!current_user_can(\'edit_page\', $post_id)) {
    return $post_id;
}

// exit on autosave
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
    return $post_id;
}

// Check if the payment amount already exists so we don\'t create another CEU
if (!get_post_meta($post->ID, \'invoice_payment_amount\', true)) {
    if (isset($_POST[\'invoice_payment_amount\'])) {

    $title = \'CEU\'.date(\'YmdHs\');

    // Create the post
    $new_post = array(
        \'post_title\'    =>  $title,
        \'post_date_gmt\' => strtotime(\'+5 minutes\'), // Set the post publish time to 5 minutes from now so it wont loop
        \'post_status\'   =>  \'future\',           // Choose: publish, preview, future, draft, etc.
        \'post_type\' =>  \'ceu\',  //\'post\',page\' or use a custom post type if you want to
    );

    $pid = wp_insert_post($new_post);
    } // end check for post entry
} // end check for meta data
} // end function

add_action( \'save_post\', \'generate_ceu\');

2 个回复
最合适的回答,由SO网友:brasofilo 整理而成

是的,wp_insert_post 将呼叫save_post, 因此,闭环。

使用

remove_action( \'save_post\', \'generate_ceu\');
$pid = wp_insert_post($new_post);
add_action( \'save_post\', \'generate_ceu\');

SO网友:RiotAct

我发现this post 这让我更进一步。。。。因此,我最终在发票中添加了一个复选框,因此如果您想在此时生成ceu,就可以这样做。它不像我希望的那样自动化,我希望它能核对发票上的余额,但我会再处理一些。到目前为止,这项工作非常有效:

function create_ceu ($post_id) {
if ( get_post_type($post_id) == \'invoice\') {

    if(isset($_POST[\'generate_ceu\'])) {

    $post_title = \'CEU\'.date(\'YmdHs\');
    $ceupost = array(
        \'post_status\' => \'publish\', 
        \'post_title\' => $post_title,
        \'post_type\' => \'ceu\', 
        \'post_author\' => 1);  
    wp_insert_post( $ceupost );

    }

    else {}

   } // end check for post type
 } // end function      

add_action(\'save_post\', \'create_ceu\',10,2);

结束

相关推荐