2014-04-07 70 views
1

我一直堅持這個好幾天了,所以任何建議真的很感激。我在CPT(自定義帖子類型)上使用ACF(高級自定義字段)。Wordpress 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

經過多天,我設法解決這個問題。

因爲我使用的是ACF,我應該在保存數據後使用內置動作來做你想做的事情。

因爲每次創建/保存帖子時都會調用此操作,所以我可能需要添加一個if語句來檢查它是否是您要查找的帖子類型。

所有的字段都應該可以通過$_POST['fields']以及如果get_post_meta沒有返回我正在尋找的。

以下修改後的代碼使用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); 
}