2017-09-26 217 views
2

我有以下PHP函數來獲取某些user_id,然後我想按照以下方式將其作爲收件人添加到消息中。將數組變量轉換爲另一個函數變量

function true_my_bp_get_users_by_xprofile($field_id_to_check, $num_to_find) { 
global $wpdb; 


$table_name = $wpdb->prefix . "bp_xprofile_data"; 

$user_ids = $wpdb->get_results( 
    $wpdb->prepare( 
     "SELECT user_id FROM $table_name 
       WHERE field_id = %d AND value LIKE '%%\"%d\"%%'", 
     $field_id_to_check, 
     $num_to_find 
    ) 
); 
print_r($user_ids); 
} 

我使用true_my_bp_get_users_by_xprofile(5, 18);它打印Array ([0] => stdClass Object ([user_id] => 1) [1] => stdClass Object ([user_id] => 2))

然後,我有這個代碼的HTML表單:

$body_input=isset($_POST['body_input'])?$_POST['body_input']:''; 
$subject_input=isset($_POST['subject_input'])?$_POST['subject_input']:''; 

send_msg($user_ids,$body_input, $subject_input); 

隨着send_msg

function send_msg($user_id, $title, $message){ 
$args = array('recipients' => $user_id, 'sender_id' => bp_loggedin_user_id(), 'subject' => $title, 'content' => $message); 
messages_new_message($args); 
} 

我想什麼做:

採取從$user_ids數組,並把它放在這裏:'recipients' => $user_id

我試圖在功能上與$ $替換USER_ID user_ids,但它不工作。

+0

作爲一個很好的做法; '全球'變量是一個不好的習慣。將類中的邏輯包裝起來,使$ wpdb成爲私有類屬性。我知道WP允許這樣做。另外,插件是否已經不存在這個功能? '不要重新發明輪子'。 –

回答

1

由於您正在將數據放入函數中的$user_ids變量,因此其範圍僅限於該函數。數據可以通過幾種不同的方式存儲和訪問。

1)。通過引用將變量傳遞給true_my_bp_get_users_by_xprofile

$user_ids = null; 

function true_my_bp_get_users_by_xprofile($field_id_to_check, $num_to_find, &$user_ids) { 
    global $wpdb; 
    $table_name = $wpdb->prefix . "bp_xprofile_data"; 

    $user_ids = $wpdb->get_results( 
     $wpdb->prepare( 
      "SELECT user_id FROM $table_name 
        WHERE field_id = %d AND value LIKE '%%\"%d\"%%'", 
      $field_id_to_check, 
      $num_to_find 
     ) 
    ); 
    print_r($user_ids); 
} 

調用函數

true_my_bp_get_users_by_xprofile(5, 18, $user_ids); 

現在你$user_ids具有的功能之外的數據和accessable。 2)。返回$user_idstrue_my_bp_get_users_by_xprofile功能

function true_my_bp_get_users_by_xprofile($field_id_to_check, $num_to_find) { 
    global $wpdb; 
    $table_name = $wpdb->prefix . "bp_xprofile_data"; 

    $user_ids = $wpdb->get_results( 
     $wpdb->prepare( 
      "SELECT user_id FROM $table_name 
        WHERE field_id = %d AND value LIKE '%%\"%d\"%%'", 
      $field_id_to_check, 
      $num_to_find 
     ) 
    ); 
    print_r($user_ids); 

    return $user_ids; 
} 

調用等 $ user_ids = true_my_bp_get_users_by_xprofile功能(5,18);

現在,你可以調用send_msg功能你已經在你的代碼中完成以上即

send_msg($user_ids, $body_input, $subject_input); 
+0

真的很有意思,謝謝。我想他們不必是兩個獨立的功能。如果我把'send_msg'放入'true_my_bp_get_users_by_xprofile'中,會不會有更好的方法呢?雖然我不知道該怎麼做。 https://pastebin.com/irCZ8iXe這是完整的代碼,目前有點麻煩。 – redditor

+0

您可以從第一個調用'send_msg'函數,但是您必須將'$ body_input'和'$ subject_input'傳遞給第一個變量,或者使用'global'來訪問它,依此類推。我認爲返回'$ user_ids'是最好的方法。 – Junaid

+0

謝謝,我去了第二個。 – redditor