web-dev-qa-db-ja.com

致命的なエラー:自動グローバル変数_POSTを再割り当てできません

WP(version3.4.2)adminにアクセスできません。上記のように表示されます

致命的なエラー:540行目の/home/xxx/public_html/wp-content/themes/rtthemes16/rt-framework/classes/admin.phpにある自動グローバル変数_POSTを再割り当てできません。

540行目は次のとおりです。

function rt_check_sidebar_array($_POST){

    if(is_array($_POST)){

        $start_unset_count = 0;

        foreach($_POST as $key => $value){
            if(stristr($key, '_sidebar_name') == TRUE && $value=="") {                  
                unset($_POST[$key]);
                $start_unset_count = 1;
            }

            if($start_unset_count>0){
                unset($_POST[$key]);
                $start_unset_count++;
            }

            if($start_unset_count==6){
                $start_unset_count = 0;
            }               
        }
    }


    $newPost == $newPost ? $newPost : $_POST;       
    return $_POST;
}

洞察はありますか?ありがとう:)

13
user3450716

PHP 5.4なので、関数のパラメータとしてスーパーグローバルを使用することはできません

$ _POSTはグローバルにアクセスできます。したがって、関数に渡す必要はありません。

http://php.net/manual/en/language.variables.superglobals.php#112184

これはあなたの関数がどのように見えるべきかです

function rt_check_sidebar_array(){

    if(is_array($_POST)){

        $start_unset_count = 0;

        foreach($_POST as $key => $value){
            if(stristr($key, '_sidebar_name') == TRUE && $value=="") {                  
                unset($_POST[$key]);
                $start_unset_count = 1;
            }

            if($start_unset_count>0){
                unset($_POST[$key]);
                $start_unset_count++;
            }

            if($start_unset_count==6){
                $start_unset_count = 0;
            }               
        }
    }


    $newPost == $newPost ? $newPost : $_POST;       
    return $_POST;
}
22

@ user3450716、Abhik Chakrabortyが言ったように、あなたがする必要がある唯一のことは、関数$_POSTパラメーターからrt_check_sidebarを削除し、次のようにパラメーターなしで関数を残すことです。

あなたの行540:

function rt_check_sidebar_array($_POST){

次のように変更します。

function rt_check_sidebar_array(){
6

@ user3450716。スーパーグローバル変数も変更できないため、unset($_POST[$key])を使用することはできません。

function rt_check_sidebar_array(){
    $post = $_POST;
    if(is_array($post)){

        $start_unset_count = 0;

        foreach( $post as $key => $value ){
            if( stristr( $key, '_sidebar_name' ) == TRUE && $value == "" ) {                  
                unset( $post[ $key ] );
                $start_unset_count = 1;
            }

            if( $start_unset_count > 0 ){
                unset( $post[ $key ] );
                $start_unset_count++;
            }

            if( $start_unset_count == 6 ){
                $start_unset_count = 0;
            }               
        }
    }

    // idk why you wrote this,
    // because $newPost variable isn't used in the code above and below
    $newPost == $newPost ? $newPost : $post;

    return $post;
}
2
Nick Kravchenko