wordpress - 创建新的自定义帖子时创建 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 但它也会重复。
如何防止重复?
解决方案
尝试为自定义字段添加检查,然后在编辑帖子时不会执行代码。
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 );
}
推荐阅读
- ios - 如何让拇指适合自定义尺寸开关?
- node.js - 节点:端口 443 需要提升权限错误
- string - 是否可以将一些值嵌入到 Go 中的另一个字符串中?
- java - Android RecyclerView 无法呈现 SurfaceView(已解决)
- git - 修改了多个文件,只推送了几个文件
- google-sheets - 使用 QUERY 时,如何使数据在使用过滤器时一起移动?
- python - 为什么我在发送时会在方法中收到多个值
作为python中的args - node.js - 如何在 Angular 中从 nodejs 获取数据
- python - django.urls.exceptions.NoReverseMatch:未找到带有参数“(”,)“的“displayTagInfo”的反向。尝试了 1 种模式:['(?P
[^/]+)$'] - android - 使用 span 更改 android 文本视图中的特定段落方向