我正在开发WordPress插件并使用Tareq's WordPress Settings API开发设置页面。
使用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),期待)
对此有什么正确的解决方法?
答案 0 :(得分: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 :(得分:1)
你不能把foreach语句(也不是for,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'
)
);
}