Php 当用户在WooCommerce中购买产品时,如何自动创建自定义帖子?

Php 当用户在WooCommerce中购买产品时,如何自动创建自定义帖子?,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,当登录用户购买产品时,我需要自动创建一个名为“project”的自定义帖子。 我将以下代码放在感谢页面上: function get_last_order_id(){ global $wpdb; $statuses = array_keys(wc_get_order_statuses()); $statuses = implode( "','", $statuses ); // Getting last Order ID (max value

当登录用户购买产品时,我需要自动创建一个名为“project”的自定义帖子。 我将以下代码放在感谢页面上:

function get_last_order_id(){
    global $wpdb;
    $statuses = array_keys(wc_get_order_statuses());
    $statuses = implode( "','", $statuses );

    // Getting last Order ID (max value)
    $results = $wpdb->get_col( "
        SELECT MAX(ID) FROM {$wpdb->prefix}posts
        WHERE post_type LIKE 'shop_order'
        AND post_status IN ('$statuses')
    " );
    return reset($results);
}
$latest_order_id = get_last_order_id(); // Last order ID

//Auto creation Project post when user purchased
if (!count($latest_order_id)) {
    return;
} else {
    function programmatically_create_post_after_buying() {
        $current_user = wp_get_current_user();
        $current_user_id = $current_user->display_name;
        $post_id = wp_insert_post(
              array(
                'author'   => $current_user_id,
                'post_title'    => $current_user_id,
                'post_status'   => 'publish',
                'post_type'   => 'project'
             )
        );
    }
    add_filter('after_setup_theme', 'programmatically_create_post_after_buying' );
}
该代码正确显示$latest\u order\u id。 但是,它不会创建帖子。 我找不到哪部分出了问题,你能帮我一下吗?
我是一个完全的初学者,所以肯定有很多问题。

您可以在woocommerce谢谢页面中调用“woocommerce\u Thankyu”操作。通过使用它,您可以获得最新的订单id,并在此基础上创建post。您可以将此代码添加到主题的functions.php中

add_action( 'woocommerce_thankyou', 'create_post_on_order' );

function create_post_on_order( $order_id ){
    global $wpdb;
    //print('<pre>'.print_r( $wpdb, true ).'</pre>');
    $order = wc_get_order( $order_id );
    if( !$order->get_id() ){
        return;
    }

    $current_user = wp_get_current_user();
    $current_user_id = $current_user->display_name;
    $post_title = $order_id.' - '.$current_user_id;
    // Check post already exit with our title or not
    $query = $wpdb->prepare(
        'SELECT ID FROM ' . $wpdb->posts . '
        WHERE post_title = %s
        AND post_type = \'project\'',
        $post_title
    );
    $wpdb->query( $query );

    if ( !$wpdb->num_rows ) {
        $post_id = wp_insert_post(
            array(
                'author'   => $current_user_id,
                'post_title'    => $post_title,
                'post_status'   => 'publish',
                'post_type'   => 'project'
            )
        );
    }
}

注意:您必须创建唯一的帖子标题,以便根据顺序识别帖子。

您的代码有很多地方出错。1如果您在感谢页面,您不必获取最新的订单id,woocommerce会在感谢页面上为您提供订单id。2你可以直接把你的代码放在感谢页面,你不必为此添加过滤器。现在最主要的事情是你的代码不工作,可能你的过滤器没有调用那个时候。谢谢你的评论,但我是一个完全的初学者,所以我不知道如何编辑。。。如果你能给我提供正确的代码,那将是一个很大的帮助,如果可能的话……嗨,乔塔姆:哇,它工作得很好。非常感谢你的帮助,我从你身上学到了很多:对不起,我能再问一个问题吗?项目帖子中有一个自定义acf字段名“ponum”。您知道如何将订单号更新到acf字段吗?我尝试了'ponum'=>$order\u id,但它没有更新字段。我肯定我走错了…添加这一行update_post_meta$post_id,'ponum',$order_id@乔塔姆·戈拉基亚:我解决了。再次感谢您的大力帮助:@Bhautik:谢谢您的帮助: