我已经被困在这几天了,所以任何建议都非常感激。我在CPT(自定义帖子类型)上使用ACF(高级自定义字段)。
我有一个名为'People'的CPT设置,在添加'person'时,我试图在发布时将该人添加为用户。我的CPT一切正常,这是我到目前为止使用add_filter
和wp_insert_user
。
add_filter('publish_people', 'people_postdata', 100);
function people_postdata($post_id) {
global $wpdb;
$firstname = get_post_meta($post_id, 'first_name', true);
$lastname = get_post_meta($post_id, 'last_name', true);
$email = get_post_meta($post_id, 'email_address', true);
$password = get_post_meta($post_id, 'password', true);
$username = preg_replace('/[^A-Za-z0-9]/', '', strtolower(get_the_title($post_id)));
$userargs = array(
'first_name' => $firstname,
'last_name' => $lastname,
'user_login' => $username,
'user_email' => $email,
'user_pass' => $password,
'role' => 'basic'
);
// var_dump($userargs);
wp_insert_user($userargs);
}
现在,如果我用真实的帖子ID替换$post_id
,那一切都很完美。但是,使用$post_id
动态获取我刚刚提交的帖子的ID,它无法正常工作,并将first_name,last_name,user_email和user_pass保留为空白。但是,出于某种原因,user_login可以正常工作。
当我添加var_dump($userargs)
以查看它被拉出的内容时,它会输出:
array(6) { ["first_name"]=> string(0) "" ["last_name"]=> string(0) "" ["user_login"]=> string(11) "richardcook" ["user_email"]=> string(0) "" ["user_pass"]=> string(0) "" ["role"]=> string(5) "basic" }
我尝试使用get_the_ID()
和get_field
,但它们都有相同的结果。
有什么想法吗?我觉得奇怪的是,它适用于get_the_title
,但没有别的。此外,如果我var_dump($post_id)
它会带回正确的ID ...但是没有使用它!
任何帮助都非常,非常感谢,还有其他任何你需要的东西让我知道。
非常感谢, [R
答案 0 :(得分:1)
经过很多天,我设法解决了这个问题。
因为我正在使用ACF,所以我应该使用内置操作在保存数据后执行您想要的操作。
因为每次创建/保存帖子等时都会调用此操作,我可能需要添加一个if语句来检查它是否是您要查找的帖子类型。
如果get_post_meta没有返回我正在寻找的内容,那么所有字段都应该通过$_POST['fields']
提供。
以下修改后的代码使用ACF操作 AFTER 保存帖子,因此元应该可用。我可以在$_POST['fields']
上执行var_dump以查看可用的POST数据。
http://www.advancedcustomfields.com/resources/actions/acfsave_post/
add_action('acf/save_post', 'people_postdata', 20);
function people_postdata($post_id) {
global $wpdb;
$firstname = get_post_meta($post_id, 'first_name', true);
$lastname = get_post_meta($post_id, 'last_name', true);
$email = get_post_meta($post_id, 'email_address', true);
$password = get_post_meta($post_id, 'password', true);
$username = preg_replace('/[^A-Za-z0-9]/', '', strtolower(get_the_title($post_id)));
$userargs = array(
'first_name' => $firstname,
'last_name' => $lastname,
'user_login' => $username,
'user_email' => $email,
'user_pass' => $password,
'role' => 'basic'
);
// var_dump($userargs);
wp_insert_user($userargs);
}