我很难在网络中的站点信息屏幕上实现自定义输入字段。我在的帮助下创建了一个字段this post 但我在保存价值方面有问题。
当我在admin\\u footer-function中输出$\\u POST变量时,它是一个空数组。
<?php
add_action(\'admin_footer\', \'pg_custom_site_options\');
function pg_custom_site_options(){
global $pagenow;
if( \'site-info.php\' == $pagenow ) {
global $details;
$blog_id = isset( $_REQUEST[\'id\'] ) ? intval( $_REQUEST[\'id\'] ) : 0;
if ( ! $blog_id ) wp_die( __(\'Invalid site ID.\') );
$saved_value = get_blog_option( $blog_id, \'blog_order\');
?>
<table>
<tr id="user16975_custom_options">
<th scope="row">Order</th>
<td><input type="text" size="5" name="blog[blog_order]" value="<?php echo esc_attr( $saved_value ) ?>" ></td>
</tr>
</table>
<script>
jQuery(function($){
$(\'.form-table tbody\').append($(\'#user16975_custom_options\'));
});
</script>
<?php
// DON\'T USE IT - SEE MY THE ANSWER BEHIND
// ---------------------------------------
// Use a default value here if the field was not submitted.
// $new_field_value = \'0\';
//global $_POST; // Just a Test
// echo var_dump($_POST); // Is an empty array :(
// if ( !empty($_POST[\'blog\'][\'blog_order\']) ){
// $new_field_value = $_POST[\'blog\'][\'blog_order\'];
// }else{
// echo "nothing to do here";
// }
// save option into the database
// update_option( \'blog_order\', $new_field_value);
}
}
?>
奇怪的是,所有值都是在Chrome Developer Tools或Firebug中提交/重新加载站点后显示的。
最合适的回答,由SO网友:Paul Geisler 整理而成
问题是重定向到site-info.php. 在此之后,插入admin\\u页脚的代码中的$\\u POST变量为空。
我只需要使用另一个挂钩“admin\\u init”,并将值保存在此处。
add_action(\'admin_init\', \'pg_save_custom_site_options\');
function pg_save_custom_site_options(){
global $pagenow;
if( \'site-info.php\' == $pagenow &&
isset($_REQUEST[\'action\']) &&
\'update-site\' == $_REQUEST[\'action\']
) {
// Use a default value here if the field was not submitted.
$new_field_value = \'0\';
if ( isset( $_POST[\'blog\'][\'blog_order\'] ) ) {
$new_field_value = intval( $_POST[\'blog\'][\'blog_order\'] );
// save option into the database
if( is_int($new_field_value) ){
update_blog_option( $_POST[\'id\'], \'blog_order\', $new_field_value );
}
}
}
}