2016-08-30 15 views
1

私はWordPressプラグインを開発中で、Tareq's WordPress Settings APIを使用して設定ページを開発しています。配列の配列内でforeachとif文を使用するにはどうすればよいですか?

APIでは、チェックボックス項目を表示しています。しかし、foreachifのステートメントを使用して、追加のチェックボックスを表示したいと思います。

  • foreach:これはwp_get_user_contact_methods()
  • ifにすべてのフィールドのための追加のチェックボックスが表示されます。別のプラグインが有効化されている場合、これは、チェックボックスの余分なセットを表示します。これは、私が今持っているものである

私自身の論理から離れる:

$settings_fields = array(// Parent array 
    'dsbl_basics' => array(// Child array 
     array(// Child's child array 
      'name' => 'text_val', 
      'label' => __('Text Input', 'dsbl'), 
      'type' => 'text', 
      'default' => 'Title', 
      'sanitize_callback' => 'intval' 
     ) 
    ), 
    'dsbl_profile' => array(// Child array 
     array(// Child's child array 
      'name' => 'name', 
      'label' => __('Name', 'dsbl'), 
      'type' => 'multicheck', 
      'options' => array(
       'first_name' => 'First Name', 
       'last_name' => 'Last Name' 
      ) 
     ), 
     array(// Child's child array 
      'name' => 'contact_info', 
      'label' => __('Contact Info', 'dsbl'), 
      'type' => 'multicheck', 
      'options' => array(
       'url' => 'Website', 
       foreach (wp_get_user_contact_methods() as $value => $label) { // Additional contact fields 
        $value => $label 
       } 
      ) 
     ), 
     if (is_plugin_active('wordpress-seo/wp-seo.php')) { // If plugin exists 
      array(// Child's child array 
       'name' => 'yoast_seo', 
       'label' => __('Yoast SEO', 'dsbl'), 
       'type' => 'multicheck', 
       'options' => array(
        'wpseo_author_title' => 'Title to use for Author page', 
        'wpseo_author_metadesc' => 'Meta description to use for Author page' 
       ) 
      ), 
     } 
    ) 
); 

私の構文がオフであることを知っている私これらのエラー:

解析エラー:構文エラー、予期しないforeach(T_FOREACH)、期待)

解析エラー:構文エラー、予期しないif(T_IF)、期待)

これへの適切なアプローチは何ですか?

+2

....のforeachを入れないでくださいとあなたの配列の内部の句ならば、それはそれがどのように動作するかではありません。 – Epodax

+0

@Epodax私ができないことを教えてくれるのではなく、同じ結果を達成するために他に何ができるのか説明できますか? –

+1

foreachとif句を配列から外し、foreach/if句の値を変数に代入し、それらの変数を大きな配列で使用します。 - コードを一緒に投げて、私たちがそれを修正することを期待しないでください。 – Epodax

答えて

2
$contactArray = []; 
foreach (wp_get_user_contact_methods() as $value => $label) { 
    $contactArray[$value] = $label; 
} 
$contactArray['url'] = 'Website'; 

$settings_fields = array(// Parent array 
    'dsbl_basics' => array(// Child array 
     array(// Child's child array 
      'name' => 'text_val', 
      'label' => 'Text Input', 
      'type' => 'text', 
      'default' => 'Title', 
      'sanitize_callback' => 'intval' 
     ) 
    ), 
    'dsbl_profile' => array(// Child array 
     array(// Child's child array 
      'name' => 'name', 
      'label' => 'dsbl', 
      'type' => 'multicheck', 
      'options' => array(
       'first_name' => 'First Name', 
       'last_name' => 'Last Name' 
      ) 
     ), 
     array(// Child's child array 
      'name' => 'contact_info', 
      'label' => 'Contact Info', 
      'type' => 'multicheck', 
      'options' => $contactArray 
     ) 
    ) 
); 

$yaostSEO = array(// Child's child array 
    'name' => 'yoast_seo', 
    'label' => 'Yoast SEO', 
    'type' => 'multicheck', 
    'options' => array(
     'wpseo_author_title' => 'Title to use for Author page', 
     'wpseo_author_metadesc' => 'Meta description to use for Author page' 
    ) 
); 

if (is_plugin_active('wordpress-seo/wp-seo.php')) { 
    $settings_fields['dsbl_profile'][] = $yaostSEO; 
} 
1

配列値または配列内の任意の場所に、foreach文を書くことはできません(for、whileまたはforループまたはコントロール構造体/ else)。とにかくそのアイデアはどこから来たのですか?このような何かがすべきです。

$settings_fields = array(// Parent array 
    'dsbl_basics' => array(// Child array 
     0 => array(// Child's child array 
      'name' => 'text_val', 
      'label' => __('Text Input', 'dsbl'), 
      'type' => 'text', 
      'default' => 'Title', 
      'sanitize_callback' => 'intval' 
     ) 
    ), 
    'dsbl_profile' => array(// Child array 
     0 => array(// Child's child array 
      'name' => 'name', 
      'label' => __('Name', 'dsbl'), 
      'type' => 'multicheck', 
      'options' => array(
       'first_name' => 'First Name', 
       'last_name' => 'Last Name' 
      ) 
     ), 
     1 => array(// Child's child array 
      'name' => 'contact_info', 
      'label' => __('Contact Info', 'dsbl'), 
      'type' => 'multicheck', 
      'options' => array(
       'url' => 'Website', 
       /* this isn't place for loops */ 
      ) 
     ) 
    ) 
); 


if (is_plugin_active('wordpress-seo/wp-seo.php')) 
{ // If plugin exists 
    $settings_fileds['dsbl_profile'][2] = array(// Child's child array 
     'name' => 'yoast_seo', 
     'label' => __('Yoast SEO', 'dsbl'), 
     'type' => 'multicheck', 
     'options' => array(
      'wpseo_author_title' => 'Title to use for Author page', 
      'wpseo_author_metadesc' => 'Meta description to use for Author page' 
     ) 
    ); 
} 
+1

私は数字を追加しました。それは、キーがなくても自分自身がやっているPHPだからです。空のキーは実際には数値キーなので、入力する必要はありませんが、phpはそれらを自動的に追加して解析します。あなたがしていること(ここではPHP)を良くしたいのならここ> http://php.net/manual/en/index.php 幸運。 – Spooky

+0

感謝してくれてありがとう。 –

関連する問題