在更新站点信息时更新MultiSite中的Network/Site-info.php上的自定义字段的操作挂钩

时间:2017-06-06 作者:K. Tromp

我当前正在使用代码将自定义字段添加到site-info.php &;site-new.php 在网络管理中,要向数据库添加自定义选项,当我创建新的子网站时,这会起作用,它会在数据库中设置并检索输入值中的值。

但是当我尝试更新此自定义选项的值时site-info, 这甚至没有到达函数,很可能是因为我使用了(错误的)钩子wpmu_new_blog, 因为我正在更新,我尝试使用wpmu_blog_updated, wpmu_edit_blog, wpmu_update_blog, 但我就是不能让它工作。

任何帮助都将不胜感激。

我的代码如下:

//Add custom field Site-options Network-admin
add_action(\'admin_footer\', \'user16975_custom_options\');
function user16975_custom_options(){
    global $pagenow;
    if( \'site-info.php\' == $pagenow OR \'site-new.php\' == $pagenow ) {

        if(ctype_digit($_GET[\'id\']))
            $custom_limit_site_id = $_GET[\'id\']; 
        else
            $custom_limit_site_id =\'\';

        ?><table><tr id="user16975_custom_options">
            <th scope="row">Maximaal aantal gebruikers</th>
            <td><input type="text" name="blog[custom_limit_amount]" value="<?=get_blog_option( $custom_limit_site_id, \'custom_limit_amount\', \'10\' );?>"/></td>
        </tr></table>
        <script>jQuery(function($){
            $(\'.form-table tbody\').append($(\'#user16975_custom_options\'));
        });</script><?php
    }
}

function add_new_blog_field($blog_id, $user_id, $domain, $path, $site_id, $meta) {
    switch_to_blog($blog_id);
    $new_field_value = \'10\';

    if ( !empty($_POST[\'blog\'][\'custom_limit_amount\']) )
        $new_field_value = $_POST[\'blog\'][\'custom_limit_amount\'];

    update_option( \'custom_limit_amount\', $new_field_value);
    restore_current_blog();
}
add_action( \'wpmu_new_blog\', \'add_new_blog_field\' );

function edit_blog_field($blog_id) {
    if ( !empty($_POST[\'blog\'][\'custom_limit_amount\']) )
        $new_field_value = $_POST[\'blog\'][\'custom_limit_amount\'];

    update_blog_option ($blog_id, \'custom_limit_amount\', $new_field_value);
    restore_current_blog();
}
add_action( \'wpmu_blog_updated\', \'edit_blog_field\' );

1 个回复
最合适的回答,由SO网友:K. Tromp 整理而成

经过进一步研究,我找到了一个解决方案,结果证明我必须使用admin\\u init。。

function pg_save_custom_site_options(){
    global $pagenow;
    if( \'site-info.php\' == $pagenow && isset($_REQUEST[\'action\']) && \'update-site\' == $_REQUEST[\'action\'] ) 
    {
        if ( isset( $_POST[\'blog\'][\'custom_limit_amount\'] ) ) 
        {
            $new_field_value = intval( $_POST[\'blog\'][\'custom_limit_amount\'] );
            if( is_int($new_field_value) ){
                update_blog_option( $_POST[\'id\'], \'custom_limit_amount\', $new_field_value );
            }
        }
    }
}
add_action(\'admin_init\', \'pg_save_custom_site_options\');

结束