2017-09-26 31 views
2

以下のPHP関数を使用して、以下のようにメッセージに受信者として追加したいuser_idsを取得します。変数を別の関数変数に配列

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

私はArray ([0] => stdClass Object ([user_id] => 1) [1] => stdClass Object ([user_id] => 2))

を印刷しtrue_my_bp_get_users_by_xprofile(5, 18);を使用していますそして、私はこのコードでHTMLフォームがあります:私はしたいもの

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

send_msg

$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); 

をdo:

$user_idsから配列を取り、それをここに置く:'recipients' => $user_id

私は関数内で$ user_idsで$ USER_IDを交換しようとしたが、それは動作しません。

+0

上記のコードの中でやったようさて、あなたはsend_msg関数を呼び出すことができます。 'global'変数は悪い習慣です。ロジックをクラスにラップし、$ 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); 
} 

今、あなたの$user_idsが関数外のデータとアクセス可能があり

true_my_bp_get_users_by_xprofile(5, 18, $user_ids); 

関数を呼び出します。

2)。 $user_idstrue_my_bp_get_users_by_xprofileから機能 $ user_ids = true_my_bp_get_users_by_xprofile(5、18)のような関数を呼び出す

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; 
} 

を返します。

あなたは良いプラクティスとして、すなわち

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

これは本当に面白いです、ありがとうございます。彼らは2つの別々の機能である必要はないと思います。 'true_my_bp_get_users_by_xprofile'の中に' send_msg'を置くと良い方法がありますか?私はこれを行う方法はわかりませんが。 https://pastebin.com/irCZ8iXeこれは完全なコードであり、現時点ではちょっと面倒です。 – redditor

+0

'send_msg'関数は最初のものから呼び出すことができますが、' $ body_input'と '$ subject_input'を最初の変数に渡すか、' global'などでそれにアクセスする必要があります。 $ user_idsを返すのが最善の方法だと思います。 – Junaid

+0

ありがとう、私は2番目に行った。 – redditor