これは私のコードです:
$args = array (
'order' => 'DESC',
'include' => get_user_meta($author->ID, 'the_following_users', true)
);
$wp_user_query = new WP_User_Query( $args );
$users = $wp_user_query->get_results();
if ( ! empty( $users ) ) {
foreach ( $users as $user ) {
// Get users
}
} else {
echo 'Error.';
}
ユーザーメタ 'the_users'は空かもしれませんので、空の場合は登録されているすべてのユーザーに表示されます。空でない場合は必要なユーザーが表示されます。
'include'が空かどうかに関わらずif ( ! empty( $users ) ) { }
が読んでいない問題、変数を作って最初にその変数が空かどうか調べることができることはわかっています'$ wp_user_query-> get_results()'を使って。
編集:
Nicolaiの答えとして、get_user_metaコードからtrueからfalseに置き換えることができ、問題は解決され、インクルードが空の場合、WP-User_Queryはfalseを返し、印刷エラーを返します。
空白が含まれていない場合、コードは問題なく動作するはずですが、 'the_users'ユーザーメタに保存されているユーザーを無視し、現在のユーザーのみを印刷するという問題は発生しません。
これが 'the_users'ユーザーメタの値です。
a:19:{i:0;s:2:"89";i:3;s:3:"105";i:4;s:2:"74";i:5;s:3:"111";i:6;s:3:"167";i:7;s:2:"83";i:8;s:2:"54";i:9;s:2:"87";i:10;s:2:"85";i:11;s:2:"77";i:13;s:2:"82";i:14;s:2:"60";i:15;s:3:"149";i:16;s:3:"160";i:17;s:2:"71";i:18;s:1:"3";i:19;s:1:"2";i:20;s:3:"121";i:21;s:2:"57";}
これが 'the_users'ユーザーメタデータの保存方法です。
$the_following_users = get_user_meta($the_follower, "the_following_users", true);
if(!in_array($user_follow_to, $the_following_users) && is_array($the_following_users)){
$the_following_users[] = $user_follow_to;
} else {
$the_following_users = array($user_follow_to);
}
update_user_meta($the_follower, "the_following_users", $the_following_users);
ここでの問題は、この規則に違反する過程で混乱と問題が生じたことです。
文ごとに1つのこと、行ごとに1つの文を実行する
別の問題と相まって:
シリアル化されたPHPとして格納されるAPIに配列を渡す(セキュリティ上の問題)
そしてもう一つ:
常にあなたの仮定をチェックしてください
'the_users'ユーザーメタに保存されているユーザーを無視し、現在のユーザーのみを印刷します。
その最後の1つはここで殺人者です。 get_user_meta
のエラー値を確認することは絶対にありません。ユーザーはthe_users
メタから始めません、それは加えられなければなりません。
このコードを頭の中で見てください。
$the_following_users = ''; //get_user_meta($the_follower, "the_following_users", true);
if(!in_array($user_follow_to, $the_following_users) && is_array($the_following_users)){
$the_following_users[] = $user_follow_to;
ここでは$the_following_users
はチェックされていません。これはまったく配列ではないかもしれませんが、false
または空の文字列です。
だから節約を修正しましょう:
$the_following_users = get_user_meta($the_follower, "the_following_users", true);
if ( empty( $the_following_users ) ) {
$the_following_user = array();
}
それでは、次の部分を単純化しましょう。
$the_following_users[] = $user_follow_to;
それがセキュリティ上のリスクにならないように保存を修正します。
$following = implode( ',', $the_following_users );
update_user_meta($the_follower, "the_following_users", $following );
最後に、フロントエンドに移動しましょう。
まず、get_user_meta
が機能すると仮定しますが、これが正しいかどうかをチェックしないでください。
$args = array (
'order' => 'DESC',
'include' => get_user_meta($author->ID, 'the_following_users', true)
);
ユーザーがこれまで誰かをフォローしたことがない場合はどうしますか。彼らがみんなをフォローしていないとどうなりますか?それはすべてを壊すでしょう!それではそれを修正して、それをコンマ区切りリスト形式に切り替えましょう:
$include = get_user_meta($author->ID, 'the_following_users', true);
if ( empty( $include ) ) {
// the user follows nobody, or has not followed anybody yet!
} else {
// turn the string into an array
$include = explode( ',', $include );
$args = array (
'order' => 'DESC',
'include' => $include
);
// etc...
}
あなたのループはこのように見えます:
foreach ( $users as $user ) {
// Get users
}
しかし、ループ内でコードを共有することは決してないため、問題が発生する可能性があります。たとえば、the_author
は常に現在の投稿の作者を参照します。 $user
に関する情報を表示したい場合は、そのIDを渡すか、publicプロパティをユーザーに渡す必要があります。
foreach ( $users as $user ) {
// Get users
echo esc_html( $user->first_name . ' ' . $user->last_name );
}
WP_User_Query
のinclude
パラメータは、引数として配列を期待します。そのため、$single
のget_user_meta
パラメータをfalse
に設定します。 false
がデフォルトなので、使わないでください。
// USE
get_user_meta( $author->ID, 'the_users', false )
// OR
get_user_meta( $author->ID, 'the_users' )