首页 > 解决方案 > 创建新的自定义帖子时创建 Wordpress 用户

问题描述

我想从前端和后端创建自定义帖子。当我创建帖子时,我想创建用户。在前端,我使用表单和 wp_insert_post,因此它可以根据需要创建帖子。在后端,我使用以下代码:

add_action( 'publish_user_contact', 'custom_post_user_create', 1, 3);
function custom_post_user_create($post_id){

 $user_login_id = 'user_'.random_int(100000, 999999);    

 update_post_meta($post_id, 'idr_contact_user_id', $user_login_id); 

 $password = wp_generate_password( 10, true, true );

 if (!empty($_POST['contact_email'])){
  $userdata = [
    'user_login'      => "$user_login_id",
    'user_pass'       => "$password",     
    'user_email'      => $_POST['contact_email'],    
    'display_name'    => sanitize_text_field( $_POST['contact_first_name'] .' '. $_POST['contact_last_name'] ),     
    'first_name'      => sanitize_text_field( $_POST['contact_first_name'] ),
    'last_name'       => sanitize_text_field( $_POST['contact_last_name'] )   
  ];
} else {
  $userdata = [
    'user_login'      => "$user_login_id",
    'user_pass'       => "$password",  
    'display_name'    => sanitize_text_field( $_POST['contact_first_name'] .' '. $_POST['contact_last_name'] ),     
    'first_name'      => sanitize_text_field( $_POST['contact_first_name'] ),   
    'last_name'       => sanitize_text_field( $_POST['contact_last_name'] )   
  ];
}
$user_id = wp_insert_user( $userdata );
}

当我尝试编辑帖子时,它会创建具有自定义帖子螺母的用户,它会创建更多用户。我尝试使用 new_to_publish,但它不起作用(用户不创建)。我尝试使用 save_post 但它也会重复。

如何防止重复?

标签: wordpress

解决方案


尝试为自定义字段添加检查,然后在编辑帖子时不会执行代码。

add_action( 'publish_user_contact', 'custom_post_user_create', 1, 3);
function custom_post_user_create($post_id){

 $user_login_id = 'user_'.random_int(100000, 999999); 

 if(get_post_meta($post_id, "idr_contact_user_id", true) ) {
    return;
 }

 update_post_meta($post_id, 'idr_contact_user_id', $user_login_id); 

 $password = wp_generate_password( 10, true, true );

 if (!empty($_POST['contact_email'])){
  $userdata = [
    'user_login'      => "$user_login_id",
    'user_pass'       => "$password",     
    'user_email'      => $_POST['contact_email'],    
    'display_name'    => sanitize_text_field( $_POST['contact_first_name'] .' '. $_POST['contact_last_name'] ),     
    'first_name'      => sanitize_text_field( $_POST['contact_first_name'] ),
    'last_name'       => sanitize_text_field( $_POST['contact_last_name'] )   
  ];
} else {
  $userdata = [
    'user_login'      => "$user_login_id",
    'user_pass'       => "$password",  
    'display_name'    => sanitize_text_field( $_POST['contact_first_name'] .' '. $_POST['contact_last_name'] ),     
    'first_name'      => sanitize_text_field( $_POST['contact_first_name'] ),   
    'last_name'       => sanitize_text_field( $_POST['contact_last_name'] )   
  ];
}
$user_id = wp_insert_user( $userdata );
}

推荐阅读