2017-01-22 15 views
0

私がここで間違っていることを教えてください... PHPのバージョン5.6.27は、wordpress 4.7.1を使用しています。私はこれをカスタムプラグインとして作成しました。私のページは結果を「失敗」として返し、2つの異なるページタイトルを試して、どちらも「失敗」を返します。これは関数内でページタイトル(位置)を取得していないことを示し、関数は失敗してelseを返します。PHP関数がキーを返さない

$locations = array(
    array(
     'location' => 'About', 
     'telephone' => '0121 34838383', 
     'email'  => '[email protected]' 
    ) 
); 

function telephone_shortcode() { 
    global $locations; 
    $title = get_the_title(); 
    $key = array_search($title, array_column($locations, 'location')); 
    if ($key) 
     return $locations[$key]['telephone']; 
    else 
     return 'fail'; 
} 
add_shortcode('telephone', 'telephone_shortcode'); 

[電話] - 検索された要素は、配列の最初の要素である場合に戻る

答えて

2

array_search戻り0を「不合格」。 0 == PHPで偽(「PHPでtruthy値を」調べる)if文でのチェックを変更

if($key !== false) 

に他のすべてが同じまますることができます。 !==を使用すると、phpに値が正確に一致するかどうかが確認されます。この構成で

+1

恐ろしい!ありがとうございました :) –

2

この結果、「約」1ページしか持って:あなたはこの中でチェックインしたとき

array_search($title, array_column($locations, 'location')); 

は0です。そして、「もし」の

if ($key) 

を$ keyパラメータは、その値がゼロであるため、falseと等しくなります。この機能を次のように設定します。

function telephone_shortcode() { 
    global $locations; 
    $title = get_the_title(); 
    $key = array_search($title, array_column($locations, 'location')); 
    if (false !== $key) 
     return $locations[$key]['telephone']; 
    else 
     return 'fail'; 
} 

すべてが機能し始めます。教育のためにPHPドックを読む:http://php.net/manual/en/language.types.boolean.php#language.types.boolean.casting