只有主题选项中的最后一个选项被保存到数据库中
only the last option in theme options are being saved to the database
我有这个管理页面功能,我试图提示管理员输入一些文本数据。
只有最后一个字段被保存并存在于数据库中的问题,最前面的根本不存在于数据库中。
正在向管理页面添加选项:
register_setting( 'top-data-group', 'yourLogo');
register_setting( 'card1-group', 'card1_text');
register_setting( 'card4-group', 'card4_text');
add_settings_section('top-options', 'Top Information', 'top_options', 'top-data' );
add_settings_section('card1', 'Card 1', 'card1_options', 'top-data' );
add_settings_section('card4', 'Card 4', 'top_options', 'top-data' );
add_settings_field('yourLogo', 'Logo Image URL:', 'yourLogoImage_callback', 'top-data', 'top-options' );
add_settings_field('card1_text', 'card 1 text:', 'card1_text_callback', 'top-data', 'card1' );
add_settings_field('card4_text', 'card 4 text:', 'card4_text_callback', 'top-data', 'card4' );
回调函数:
function card1_text_callback (){
$preText = esc_attr( get_option('card1_text'));
echo ' <input type="text" name="card1_text" placeholder="card text" size="50" value="'.$preText. '" > ';
}
function card4_text_callback (){
$preText = esc_attr( get_option('card4_text'));
echo ' <input type="text" name="card4_text" placeholder="card text" size="50" value="'.$preText. '" > ';
}
function yourLogoImage_callback (){
$preText = esc_attr( get_option('yourLogoImage'));
echo ' <input type="text" name="yourLogoImage" placeholder="your Logo Image URL" size="50" value="'.$preText. '" > <p> use external or internal image url , preferred (300 * 50 px) </p>' ;
}
表单页面:
<h1> Top Section </h1>
<?php settings_errors(); ?>
<form action="options.php" method="post" >
<?php
settings_fields('top-data-group');
do_settings_sections('top-data');
settings_fields('card1-group');
do_settings_sections('card1');
settings_fields('card4-group');
do_settings_sections('card4');
submit_button('save', 'primary sub-button', 'submit', true);
?>
</form>
只有最后一个选项被保存到数据库中,前面的都是空的。
表格工作正常,我可以在仪表板中找到我想要的所有内容,但它们没有保存到 DB
编辑:
register_setting()
匹配 add_setting_field()
id ..我对 card4 做了同样的事情,它有效。
我是这样解决的:
1- regester_setting()
ID 不应与任何其他 ID 匹配,这是您必须匹配的 ID
在回调函数中使用。
2-你不需要在任何地方使用add_setting_field()
的id。
3- 将所有部分放在一个选项组中。
4- add_settings_section()
和 add_setting_field()
中的页面应该与 add_menu_page()
或 add_submenu_page()
.
呈现的页面 slug 相匹配
所以现在的代码如下:
正在向管理页面添加选项:
更改:删除了每组选项,只保存并添加到每个 regester_settings()
。更改了页面 slug 以匹配 add_settings_field()
.
上的页面
add_submenu_page('top', 'top', 'top', 'manage_options', 'top-data', 'top_init' );
register_setting( 'top-data-group', 'yourLogo');
register_setting( 'top-data-group', 'card1_text');
register_setting( 'top-data-group', 'card4_text');
add_settings_section('top-options', 'Top Information', 'top_options', 'top-data' );
add_settings_section('card1', 'Card 1', 'card1_options', 'top-data' );
add_settings_section('card4', 'Card 4', 'top_options', 'top-data' );
add_settings_field('random3', 'Logo Image URL:', 'yourLogoImage_callback', 'top-data', 'top-options' );
add_settings_field('crandom1', 'card 1 text:', 'card1_text_callback', 'top-data', 'card1' );
add_settings_field('random2', 'card 4 text:', 'card4_text_callback', 'top-data', 'card4' );
回调函数:
更改:更改了 get_options()
和 name=
属性以匹配 regester_settings()
上的 ID
function card1_text_callback (){
$preText = esc_attr( get_option('card1_text'));
echo ' <input type="text" name="card1_text" placeholder="card text" size="50" value="'.$preText. '" > ';
}
function card4_text_callback (){
$preText = esc_attr( get_option('card4_text'));
echo ' <input type="text" name="card4_text" placeholder="card text" size="50" value="'.$preText. '" > ';
}
function yourLogoImage_callback (){
$preText = esc_attr( get_option('yourLogo'));
echo ' <input type="text" name="yourLogoImage" placeholder="your Logo Image URL" size="50" value="'.$preText. '" > <p> use external or internal image url , preferred (300 * 50 px) </p>' ;
}
表单页面:
更改:删除所有组选项,只保存一个。
<h1> Top Section </h1>
<?php settings_errors(); ?>
<form action="options.php" method="post" >
<?php
settings_fields('top-data-group');
do_settings_sections('top-data');
submit_button('save', 'primary sub-button', 'submit', true);
?>
</form>
我有这个管理页面功能,我试图提示管理员输入一些文本数据。
只有最后一个字段被保存并存在于数据库中的问题,最前面的根本不存在于数据库中。
正在向管理页面添加选项:
register_setting( 'top-data-group', 'yourLogo');
register_setting( 'card1-group', 'card1_text');
register_setting( 'card4-group', 'card4_text');
add_settings_section('top-options', 'Top Information', 'top_options', 'top-data' );
add_settings_section('card1', 'Card 1', 'card1_options', 'top-data' );
add_settings_section('card4', 'Card 4', 'top_options', 'top-data' );
add_settings_field('yourLogo', 'Logo Image URL:', 'yourLogoImage_callback', 'top-data', 'top-options' );
add_settings_field('card1_text', 'card 1 text:', 'card1_text_callback', 'top-data', 'card1' );
add_settings_field('card4_text', 'card 4 text:', 'card4_text_callback', 'top-data', 'card4' );
回调函数:
function card1_text_callback (){
$preText = esc_attr( get_option('card1_text'));
echo ' <input type="text" name="card1_text" placeholder="card text" size="50" value="'.$preText. '" > ';
}
function card4_text_callback (){
$preText = esc_attr( get_option('card4_text'));
echo ' <input type="text" name="card4_text" placeholder="card text" size="50" value="'.$preText. '" > ';
}
function yourLogoImage_callback (){
$preText = esc_attr( get_option('yourLogoImage'));
echo ' <input type="text" name="yourLogoImage" placeholder="your Logo Image URL" size="50" value="'.$preText. '" > <p> use external or internal image url , preferred (300 * 50 px) </p>' ;
}
表单页面:
<h1> Top Section </h1>
<?php settings_errors(); ?>
<form action="options.php" method="post" >
<?php
settings_fields('top-data-group');
do_settings_sections('top-data');
settings_fields('card1-group');
do_settings_sections('card1');
settings_fields('card4-group');
do_settings_sections('card4');
submit_button('save', 'primary sub-button', 'submit', true);
?>
</form>
只有最后一个选项被保存到数据库中,前面的都是空的。 表格工作正常,我可以在仪表板中找到我想要的所有内容,但它们没有保存到 DB
编辑:
register_setting()
匹配 add_setting_field()
id ..我对 card4 做了同样的事情,它有效。
我是这样解决的:
1- regester_setting()
ID 不应与任何其他 ID 匹配,这是您必须匹配的 ID
在回调函数中使用。
2-你不需要在任何地方使用add_setting_field()
的id。
3- 将所有部分放在一个选项组中。
4- add_settings_section()
和 add_setting_field()
中的页面应该与 add_menu_page()
或 add_submenu_page()
.
所以现在的代码如下:
正在向管理页面添加选项:
更改:删除了每组选项,只保存并添加到每个 regester_settings()
。更改了页面 slug 以匹配 add_settings_field()
.
add_submenu_page('top', 'top', 'top', 'manage_options', 'top-data', 'top_init' );
register_setting( 'top-data-group', 'yourLogo');
register_setting( 'top-data-group', 'card1_text');
register_setting( 'top-data-group', 'card4_text');
add_settings_section('top-options', 'Top Information', 'top_options', 'top-data' );
add_settings_section('card1', 'Card 1', 'card1_options', 'top-data' );
add_settings_section('card4', 'Card 4', 'top_options', 'top-data' );
add_settings_field('random3', 'Logo Image URL:', 'yourLogoImage_callback', 'top-data', 'top-options' );
add_settings_field('crandom1', 'card 1 text:', 'card1_text_callback', 'top-data', 'card1' );
add_settings_field('random2', 'card 4 text:', 'card4_text_callback', 'top-data', 'card4' );
回调函数:
更改:更改了 get_options()
和 name=
属性以匹配 regester_settings()
function card1_text_callback (){
$preText = esc_attr( get_option('card1_text'));
echo ' <input type="text" name="card1_text" placeholder="card text" size="50" value="'.$preText. '" > ';
}
function card4_text_callback (){
$preText = esc_attr( get_option('card4_text'));
echo ' <input type="text" name="card4_text" placeholder="card text" size="50" value="'.$preText. '" > ';
}
function yourLogoImage_callback (){
$preText = esc_attr( get_option('yourLogo'));
echo ' <input type="text" name="yourLogoImage" placeholder="your Logo Image URL" size="50" value="'.$preText. '" > <p> use external or internal image url , preferred (300 * 50 px) </p>' ;
}
表单页面:
更改:删除所有组选项,只保存一个。
<h1> Top Section </h1>
<?php settings_errors(); ?>
<form action="options.php" method="post" >
<?php
settings_fields('top-data-group');
do_settings_sections('top-data');
submit_button('save', 'primary sub-button', 'submit', true);
?>
</form>