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

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

ただいまの
回答率

89.20%

【PHP】以下のエラー表示わかる方おりますでしょうか?

受付中

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 792
退会済みユーザー

退会済みユーザー

表題の件ですが、以下エラーコードがページ最下部に表示されるようになりました。
こちらの原因と対策がわかる方おりましたらご教示いただけますと幸いです。
よろしくお願いいたします。

対象ページ:
sotsuen.net/stu-1/

エラー表示:
Warning: in_array() expects parameter 2 to be array, boolean given in /home/emc3333/sotsuen.net/public_html/wp-content/plugins/emc-original-code/inc/original-code.php on line 89

該当箇所(太字部):
function add_footer() {
if (    !( is_home() && in_array( 'emc_top', get_site_option( 'emc_oc_exclude' ) ) ) &&
            !( is_single() && in_array( 'emc_post', get_site_option( 'emc_oc_exclude' ) ) ) &&
!( is_page() && in_array( 'emc_page', get_site_option( 'emc_oc_exclude' ) ) ) &&
!( is_archive() && in_array( 'emc_archive', get_site_option( 'emc_oc_exclude' ) ) ) &&
!( is_date() && in_array( 'emc_date', get_site_option( 'emc_oc_exclude' ) ) ) &&
!( is_category() && in_array( 'emc_category', get_site_option( 'emc_oc_exclude' ) ) ) &&
!( is_tag() && in_array( 'emc_tag', get_site_option( 'emc_oc_exclude' ) ) ) &&
!( is_search() && in_array( 'emc_search', get_site_option( 'emc_oc_exclude' ) ) ) &&
!( is_404() && in_array( 'emc_404', get_site_option( 'emc_oc_exclude' ) ) )
) {
echo get_site_option( 'emc_oc_footer_code' );
}
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • archiver

    2018/01/25 09:21

    この質問(https://teratail.com/questions/110377)に連携したものですよね。新たに質問を起こすのではなく、元の質問を編集して、そちらに追記するようにしてください。

    キャンセル

  • 退会済みユーザー

    2018/01/25 14:44

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 4

+2

エラーメッセージ Warning: in_array() expects parameter 2 to be array, boolean given in /home/emc3333/sotsuen.net/public_html/wp-content/plugins/emc-original-code/inc/original-code.php on line 89
を直訳すると
"/home/emc3333/sotsuen.net/public_html/wp-content/plugins/emc-original-code/inc/original-code.php"の89行目で使われているin_array() の第2引数は配列(array)であるべきなのに、論理値(boolean)になっている。

これで判るように、エラーの原因は「in_array関数の使い方を間違えている」から。

in_array関数は、in_array(探したい値、いろいろな値が入っている配列)というような使い方をして、第2引数の配列に、第1引数の値が含まれていればTRUE、含まれていなければFALSEを返します。
例:in_array(3,[1,34,6,67,3,4,8]) => TRUE (配列に3が含まれているから)
in_array(99,[1,34,6,67,3,4,8]) => FALSE (配列に99が含まれていないから)

コードの意図が質問に書かれていないので、対応(修正)へのアドバイスはできません。
(何をしようとしているプログラムの中の、何をしている箇所のコードなのか、といった丁寧な説明をしないと、回答できないと思いますよ、誰も)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

get_site_option( 'emc_oc_exclude' )が取得できてない
emc_oc_excludeが入ってないってことでしょうね

多分WPが内部でキャッシュしてるとは思いますが
なんどもDBに問い合わせるのもいやなので

if($emc_oc_exclude=get_site_option( 'emc_oc_exclude' )){
  if (    !( is_home() && in_array( 'emc_top', $emc_oc_exclude ) ) &&
  /*略*/
}


って感じで囲んでしまったらいいと思います

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

Warning: in_array() expects parameter 2 to be array, boolean given in
「in_arrayの第二引数は配列型(array)を要求しますが、booleanが渡された」というエラーです。

つまり、get_site_option( 'emc_oc_exclude' )の戻り値にarrayではなく、booleanが返ってしまっているのが原因です。

質問内容では、2回目の呼び出しでエラーが起こっているとのことなので、複数回呼び出したとき返却値が変わってしまうことがあるのではないでしょうか?
↑勘違いだったので訂正

下のようなコードで、実際の返却値を確認してみてください。

function add_footer() {
    // 試しに複数回呼び出して、返却値を表示してみる。
    var_dump( get_site_option( 'emc_oc_exclude' ) );
    ...

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/25 13:42

    いや、タグついてないですがこれはWordpressのコード

    get_site_optionは複数回呼び出されて戻り値が変わるようなやつじゃないです
    値が取得できなかった時にfalseを返します

    単に&&は前の方でfalseになれば後の方は処理されないから
    先のコードでは引っかかってないだけだと思います

    キャンセル

  • 2018/01/25 14:07

    本当ですね;失礼しました。
    1行目の否定(`!`)を見落としており、2行目がネストされていたので2回目の呼び出ししかありえないと勘違いしておりました。

    また、wordpress触ったことがないため、自作関数と誤解していました。
    ご指摘ありがとうございます!

    キャンセル

0

ifの前に「echo get_site_option( 'emc_oc_footer_code' );」を置けば
わかると思いますが、true/falseのどちらかが返っているのでしょう。
まともなチェックができるかどうかはともかく
エラーを回避するだけならこうですかね

function add_footer() {
  $gso=get_site_option( 'emc_oc_footer_code' )?:[];
  if (
    !(is_home() && in_array('emc_top', $gso)) &&
    !(is_single() && in_array('emc_post', $gso)) &&
    !(is_page() && in_array('emc_page', $gso)) &&
    !(is_archive() && in_array('emc_archive', $gso)) &&
    !(is_date() && in_array('emc_date', $gso)) &&
    !(is_category() && in_array('emc_category', $gso)) &&
    !(is_tag() && in_array('emc_tag', $gso)) &&
    !(is_search() && in_array('emc_search', $gso)) &&
    !(is_404() && in_array('emc_404', $gso))
    ) {
    実行文;
  }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/25 09:37

    念のため・・・
    文法が間違っているのとロジックが間違っているのでは処理方法が全く異なります。
    質問内容は文法が間違っているのでその対処方法を書いています。
    実際にはロジックがまちがっているので全体を見直す必要があります

    キャンセル

  • 2018/01/25 10:30

    $gso=get_site_option( 'emc_oc_footer_code' )?:[];
    では、$gsoがarrayとなることが保証されないのではないでしょうか?
    get_site_option( 'emc_oc_footer_code' )がtrueだった場合、$gsoは変わらずtrueとなってしまいます。

    キャンセル

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

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる