WordPress主题错误“致命错误:无法重新分配自动全局变量_POST”


Wordpress theme Error "Fatal error: Cannot re-assign auto-global variable _POST"

这个主题有错误,http://www.mafiashare.net/download/sound-rock-music-band-wordpress-theme/当我尝试激活它时,这会显示

( ! ) SCREAM: Error suppression ignored for
( ! ) Fatal error: Cannot re-assign auto-global variable _POST in C:'wamp'www'web'wp-content'themes'soundrock'functions.php on line 48
Call Stack
#   Time    Memory  Function    Location
1   0.0014  364560  {main}( )   ..'themes.php:0
2   0.0043  433520  require_once( 'C:'wamp'www'web'wp-admin'admin.php' )    ..'themes.php:10
3   0.0048  451648  require_once( 'C:'wamp'www'web'wp-load.php' )   ..'admin.php:30
4   0.0052  463256  require_once( 'C:'wamp'www'web'wp-config.php' ) ..'wp-load.php:29
5   0.0061  553312  require_once( 'C:'wamp'www'web'wp-settings.php' )   ..'wp-config.php:90

所以在函数中.php在第 48 行,我删除了这段代码,然后主题正在工作,但我想为什么它会抛出错误?

function events_meta_save($_POST, $post_id) {
    global $wpdb;
    if ( empty($_POST["event_social_sharing"]) ) $_POST["event_social_sharing"] = "";
    if ( empty($_POST["event_start_time"]) ) $_POST["event_start_time"] = "";
    if ( empty($_POST["event_end_time"]) ) $_POST["event_end_time"] = "";
    if ( empty($_POST["event_all_day"]) ) $_POST["event_all_day"] = "";
    if ( empty($_POST["event_booking_url"]) ) $_POST["event_booking_url"] = "";
    if ( empty($_POST["event_address"]) ) $_POST["event_address"] = "";
        $sxe = new SimpleXMLElement("<event></event>");
            $sxe->addChild('event_social_sharing', $_POST["event_social_sharing"] );
            $sxe->addChild('event_start_time', $_POST["event_start_time"] );
            $sxe->addChild('event_end_time', $_POST["event_end_time"] );
            $sxe->addChild('event_all_day', $_POST["event_all_day"] );
            $sxe->addChild('event_booking_url', $_POST["event_booking_url"] );
            $sxe->addChild('event_address', $_POST["event_address"] );
                $sxe = save_layout_xml($sxe);
        update_post_meta( $post_id, 'cs_event_meta', $sxe->asXML() );
}

替换

function events_meta_save($_POST, $post_id) {
    global $wpdb;
    if ( empty($_POST["event_social_sharing"]) ) $_POST["event_social_sharing"] = "";
    ....
    ....

function events_meta_save($_my_post, $post_id) {
    global $wpdb;
    if ( empty($_my_post["event_social_sharing"]) ) $_POST["event_social_sharing"] = "";
    ....
    ....

不要忘记将条件中的所有$_POST替换为$_my_post或任何其他名称

原因,如其他答案中所写:

不能使用 $_POST 作为函数/方法参数

.这样做会尝试重新分配符号表中的变量。将此视为语言的保存关键字。将其放在函数签名中就像使用语言的关键字作为变量名称来定义新变量一样。

@snjflame,你不需要使用 $_POST 作为函数的参数,因为它是一个超全局变量。您无法重新定义$_POST变量;你需要在函数的开头为$_POST变量定义一个 "handler ",并在下面使用它。

例如:

<?php
    function events_meta_save( $post_id ) {
        global $wpdb;
        $post = $_POST;
        if ( empty($post["event_social_sharing"]) ) $post["event_social_sharing"] = "";
        if ( empty($post["event_start_time"]) ) $post["event_start_time"] = "";
        if ( empty($post["event_end_time"]) ) $post["event_end_time"] = "";
        if ( empty($post["event_all_day"]) ) $post["event_all_day"] = "";
        if ( empty($post["event_booking_url"]) ) $post["event_booking_url"] = "";
        if ( empty($post["event_address"]) ) $post["event_address"] = "";
        $sxe = new SimpleXMLElement("<event></event>");
            $sxe->addChild('event_social_sharing', $post["event_social_sharing"] );
            $sxe->addChild('event_start_time', $post["event_start_time"] );
            $sxe->addChild('event_end_time', $post["event_end_time"] );
            $sxe->addChild('event_all_day', $post["event_all_day"] );
            $sxe->addChild('event_booking_url', $post["event_booking_url"] );
            $sxe->addChild('event_address', $post["event_address"] );
        $sxe = save_layout_xml($sxe);
        update_post_meta( $post_id, 'cs_event_meta', $sxe->asXML() );
    }
?>
相关文章: