如何在Network>Site Info屏幕上保存自定义输入字段的值

时间:2014-10-09 作者:Paul Geisler

我很难在网络中的站点信息屏幕上实现自定义输入字段。我在的帮助下创建了一个字段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中提交/重新加载站点后显示的。

1 个回复
最合适的回答,由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 );
            }

        }

    }
}

结束