質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1262閲覧

WordPressでユーザの存在を判定する関数を作りたい

maxbet

総合スコア10

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/05/20 12:13

編集2022/01/12 10:55

###実現したいこと
WordPressで作りたい関数があります。

引数($value)のユーザが存在するかどうかを判定する関数です。

###試したこと
考えたのは下記のis_userという関数です。
たとえば「ID2」の人の存在判定について、このように使います。
if( is_user( 'id', '2' )==false ){ echo 'そのユーザIDは存在しません。' }

下記がその関数で、配列かそうでないかに応じてループさせているつもりですが…これが判定してくれません。

$typeにはidnameが入り、その値を$valueに入れ、$valueのユーザが存在するかどうかを判定したいという意図です。

PHP

1function is_user( $type, $value ) { 2 if( is_array($value) ){ 3 foreach ( $value as $v ) { 4 if($type=='name'){ 5 $user_data = get_user_by( 'name', $v ); 6 } 7 else if($type=='id'){ 8 $user_data = get_user_by( 'id', $v ); 9 } 10 if ($user_data){ 11 return true; 12 } 13 else{ 14 return false; 15 } 16 } 17 } 18 else{ 19 if($type=='name'){ 20 $user_data = get_user_by( 'name', $value ); 21 } 22 else if($type=='id'){ 23 $user_data = get_user_by( 'id', $value ); 24 } 25 if ($user_data){ 26 return true; 27 } 28 else{ 29 return false; 30 } 31 } 32}

書いてみて思ったのが、truefalseかが、foreachの中で何度もreturnで返ってくるという処理はどうなのか気になったということもあります。

その他間違ったところ、もっと直した方がいいところなどを、教えて頂けませんでしょうか。

ご回答宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

get_user_by だと1つのユーザしか検索出来ないので、新しく関数を作成して、
is_user( 'id' array( '1', '3' ) )の様に検索できる関数を作りたい、と解釈しました。

配列を渡した際のforeach()のループ内でかならず下記の部分を通ってしまうので、
ループの1回めで必ずretrunされてしまいます。
returnによってis_user関数が1回めのループで終了してしまうので、2つ目以降の値について判定が出来ない状態です。

PHP

1if ( $user_data ) { 2 return true; 3} 4else{ 5 return false; 6}

単体のみ判定できればいいのあれば、
get_user_byは見つからなかったらfalseを返すという動作のようなので、
判定部分については下記のような書き方でもいいのかなと思います。

PHP

1return get_user_by( $type, $value ) !== false;

追記:
第2引数が文字列と配列、どちらが来ても処理出来るようにしたい、とのことでしたので
元のコードから変化が少ないような書き方にしてみました。

function is_user( $type, $value ) { if( is_array($value) ){ foreach ( $value as $v ) { if($type=='name'){ $user_data = get_user_by( 'name', $v ); } else if($type=='id'){ $user_data = get_user_by( 'id', $v ); } if ($user_data){ return true; } } // foreach の検索結果で見つからなかったらfalseを返す return false; } else{ if($type=='name'){ $user_data = get_user_by( 'name', $value ); } else if($type=='id'){ $user_data = get_user_by( 'id', $value ); } if ($user_data){ return true; } else{ return false; } } }

配列が渡った場合、ループで1件ずつ確認して、どこかで見つかったらtrueを返す、としています。

投稿2019/05/20 13:34

編集2019/05/20 15:37
Eggpan

総合スコア2665

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maxbet

2019/05/20 14:57 編集

ありがとうございます。ちょっとすみません、「単体のみ判定できればいいのあれば」とは、どういう意味でしょうか? まず仰るとおり、「is_user( $type, $value )」という関数は、「is_user( 'id', array( '1', '3' ) )」のような配列を判定したいと考えています。 (ただし配列だけでなく「is_user( 'id', '1') )」のような単体も同じこの関数で判定したいです。) なので、「単体」とはどういう意味なのか気になりました。「単体」だけでなく「配列」も判定したいので。 そして、「return get_user_by( $type, $value ) !== false;」もよくわかっていません。 これはどういう意味で、どこに書けばいいのでしょうか? 「!==false」というのは「falseでないとき」という意味で、「ifの中に書くもの」だという認識です。ですが、「ifの中に書くのではなくて、そのままreturnする」という書き方がまったくわかりません…。 できるかぎり、思いつくかぎりあちこちをそれに入れ替えてみたのですが判定はうまくいきませんでした。
Eggpan

2019/05/20 15:30

質問内のソースコードから、第2引数が配列の場合に分岐させたいのかなと感じたのですが、例が is_user( 'id', '2' )==false となっていたので、混乱してしまいました。文字列でも配列でも上手いこと処理させたい、という事ですね。 「return get_user_by( $type, $value ) !== false;」は代入する処理が省略できるかな、と思って記載したのですが、現時点でよくわからなければ、これは使わなくても大丈夫です。
Eggpan

2019/05/20 15:45

「!==false」というのは「falseでないとき」という意味で、「ifの中に書くもの」だという認識は、これはそうだと思います。 return の値は必ずしも変数やtrue、falseといったものでなくても良いので、たとえば 「reutrn 0 == 1;」 みたいな書き方ができます。これは「0 == 1」の結果、つまりfalseを返却します。 「return get_user_by( $type, $value ) !== false;」はそれの応用みたいな感じです。うまく伝わるでしょうか・・。
maxbet

2019/05/21 02:36

ありがとうございます。伝わります。「return」にはそのような使い方があるんですね! あれから一晩悩んで、どうやら get_user_by( 'name', $v ); ↓こうだった get_user_by( 'login', $v ); みたいでして、たぶんそれでうまくいけそうな感触です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問