Wordpress CPT并使用ACF添加用户

时间:2014-04-07 13:37:30

标签: wordpress advanced-custom-fields

我已经被困在这几天了,所以任何建议都非常感激。我在CPT(自定义帖子类型)上使用ACF(高级自定义字段)。

我有一个名为'People'的CPT设置,在添加'person'时,我试图在发布时将该人添加为用户。我的CPT一切正常,这是我到目前为止使用add_filterwp_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

1 个答案:

答案 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);
}