2016-08-30 2 views
1

Я разрабатываю плагин WordPress и используя Tareq's WordPress Settings API для разработки моей страницы настроек.Как использовать foreach и if statement в массиве массивов?

С API я показываю элементы флажка. Однако я хочу показать дополнительные флажки, используя операторы foreach и if.

  • 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

.... Не помещайте Еогеасп и если положения внутри вашего массива, что это не так, как это работает. – 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 (или while, for, do или любой цикл или структуру управления if/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 в этом случае) здесь> http://php.net/manual/en/index.php Удачи. – Spooky

+0

Цените это, спасибо за понимание. –