在WordPress选项页面中,我有一个设置字段,其中包含属性为multiple的HTML选择。自定义帖子类型动态填充选择的选项,一切都很好。我可以将一个值保存到数组中,但不能更多。这是当前的var_dump:
array(1){[" awc_cpt"] => string(12)" board_member" }
理想情况下,我希望返回的数组:
阵列(
" board_member" => " board_member&#34 ;,
" another_cpt" => " another_cpt&#34 ;,
//等等,根据需要提供尽可能多的自定义帖子类型
)
我是PHP的初学者,所以我可能会缺少一些基础知识。
问题:如何将多个选定选项保存到此WordPress设置的数组中?
< PHP
AWC_Redirect类{
private $ awc_redirect_options;
public $ non_archived_posts = array();
public function __construct(){
if(is_admin()){
add_action(' admin_menu',array($ this,' awc_redirect_add_plugin_page'));
add_action(' admin_init',数组($ this,' awc_redirect_page_init'));
}
add_action(' template_redirect',array($ this,' AWC_template_redirect'));
}
公共函数awc_redirect_add_plugin_page(){
add_options_page(
' AWC重定向',// page_title
' AWC重定向',// menu_title
' manage_options',//功能
' awc-redirect',// menu_slug
数组($ this,' awc_redirect_create_admin_page')//函数
);
}
public function awc_redirect_create_admin_page(){
$ this-> awc_redirect_options = get_option(' awc_redirect_option_name'); ?>
< div class =" wrap">
< h2> AWC重定向< / h2>
&LT p为H.;< / p为H.
<?php settings_errors(); ?>
< form method =" post"行动=" options.php">
< PHP
settings_fields(' awc_redirect_option_group');
do_settings_sections(' awc-redirect-admin');
submit_button();
?>
< /形式>
< / DIV>
<?php var_dump(get_option(' awc_redirect_option_name')); ?>
<?php}
public function awc_redirect_page_init(){
register_setting(
' awc_redirect_option_group',// option_group
' awc_redirect_option_name',// option_name
数组($ this,' awc_redirect_sanitize')// sanitize_callback
);
add_settings_section(
' awc_redirect_setting_section',// id
'设置',//标题
数组($ this,' awc_redirect_section_info'),//回调
' AWC重定向管理员' //页面
);
add_settings_field(
' awc_cpt',// id
'自定义帖子类型',//标题
数组($ this,' awc_cpt_callback'),//回调
' awc-redirect-admin',//页面
' awc_redirect_setting_section' // 部分
);
}
public function awc_redirect_sanitize($ input){
$ sanitary_values = array();
if(isset($ input [' awc_cpt'])){
$ sanitary_values [' awc_cpt'] = $ input [' awc_cpt'];
}
返回$ sanitary_values;
}
public function awc_redirect_section_info(){
}
public function awc_cpt_callback(){
?> < select name =" awc_redirect_option_name [awc_cpt]" ID =" awc_cpt"多个>
<?php echo $ this-> AWC_get_post_types(); ?>
< /选择> < PHP
}
//获取所有已归档的帖子类型=>真正
公共函数AWC_get_post_types(){
$ post_types = $ this-> AWC_list_post_types();
$ op ='&#39 ;;
foreach($ post_types as $ post_type){
$ op。= $ this-> AWC_get_post_details($ post_type);
}
return $ op;
}
公共职能AWC_list_post_types(){
$ args = array(
'公' =>真正,
' _builtin' =>假
);
$ output ='名称&#39 ;; //名称或对象,注释名称是默认名称
$ operator ='和'; //'和'或者'或'
$ op ='&#39 ;;
$ post_types = get_post_types($ args,$ output,$ operator);
return $ post_types;
}
//循环并吐出到< select>。如果已设置,则标记为已选中。
公共函数AWC_get_post_details($ post_type){
$ op = get_post_type_object($ post_type);
if(!$ post_type || false === $ op-> has_archive){
返回;
}
$ name = $ op-> name;
$ label = $ op-> label;
$ archive_link = get_post_type_archive_link($ post_type);
//必须执行以下操作,因为array_push不能处理空变量...
// ...所以用第一个设置它,用其余的推动。
if(empty($ this-> non_archived_posts)){
$ this-> non_archived_posts [] = $ name;
} else {
array_push($ this-> non_archived_posts,$ name);
}
$ selected =(isset($ this-> awc_redirect_options [' awc_cpt'])&& $ this-> awc_redirect_options [' awc_cpt'] === $ name)? '选择' :'&#39 ;;
$ select_options ='
< option value ="' 。 $ name。 '" ' 。 $ selected。 '>' 。 $ label。 '< /选项>
&#39 ;;
return $ select_options;
}
公共函数AWC_template_redirect(){
$ post_types = $ this-> AWC_list_post_types();
foreach($ post_types为$ cpt){
if(is_singular($ cpt)&& get_post_type_object($ cpt) - > has_archive){
$ redirectLink = get_post_type_archive_link($ cpt);
wp_redirect($ redirectLink,302);
出口;
}
}
}
}
$ awc_redirect = new AWC_Redirect();