WordPress用户Meta&ChromePHP或以其他方式调试/查看php变量

时间:2021-06-25 作者:roly151

我正在开发一个插件来扩展BuddyBoss平台。具体来说,我正在将BB用户信息与Wordpress用户元数据同步。

我的大部分代码都能正常工作(国家和地区组织更新良好),但同步我的“性别”字段并没有按预期工作。它似乎适用于男性和女性,但当选择“其他”时,它会将wordpress用户元字段设置为“女性”。我有两个问题:

你能看到这段代码有什么问题吗:(忽略所有5次控制台输出尝试-这是我下面的第二个问题!)

function BB_WP_SYNC_update_wordpress_usermeta( $user_id, $posted_field_ids, $errors) {
    
    console_log( $user_id);
    var_dump($user_id);
    debug_to_console("inside sync function");
    error_log($user_id);
    ChromePhp::log("chromephp inside sync");

    if ( empty( $user_id ) ) {
        $user_id = bp_loggedin_user_id();
    }

    if ( empty( $errors ) ) {
        $country = xprofile_get_field_data(9, $user_id);
        $region = xprofile_get_field_data(29, $user_id);
        $gender = xprofile_get_field_data(5, $user_id);
        ChromePhp::log($gender);
        var_dump($gender);

        if ($gender == \'his_Male\') {
            $wpgender = \'Male\';
        } elseif ($gender = \'her_Female\') {
            $wpgender = \'Female\';
        } else {
            $wpgender = \'Other\';
        }
        ChromePhp::log($wpgender);
        var_dump($wpgender);
        
        $dob = xprofile_get_field_data(4, $user_id);
        
        update_user_meta($user_id, \'ofc_country\', $country);
        update_user_meta($user_id, \'ofc_regional_organisation\', $region);
        update_user_meta($user_id, \'ofc_gender\', $wpgender);
        update_user_meta($user_id, \'ofc_date_of_birth\', $dob);

    } else {
        ChromePhp::log($errors);
    }
}
add_action( \'xprofile_updated_profile\', \'BB_WP_SYNC_update_wordpress_usermeta\', 1, 3 );
问题2:我尝试了各种方法(从上面的代码可以看出)将性别变量输出到控制台。但什么都不管用。我已经设置了ChromePhp,如果我在同一个插件的另一个函数中使用它,它就会工作,但我无法让它在这个特定函数中工作。与创建一个使用JS输出到控制台的函数相同。我什么也得不到。var\\u dump也不起作用-我认为这是因为一旦编辑完成并按下submit,用户配置文件就会重新加载。(我不是专家,所以这让我头痛不已)。ChromePHP工作的函数是Buddyboss插件模板的一部分。这会很好地输出到控制台,因此我知道ChromePP设置正确:

    if ( ! function_exists( \'BB_WP_SYNC_get_settings_sections\' ) ) {
    function BB_WP_SYNC_get_settings_sections() {
        ChromePhp::log(\'Hello console!\');

        $settings = array(
            \'BB_WP_SYNC_settings_section\' => array(
                \'page\'  => \'addon\',
                \'title\' => __( \'WP Sync Settings\', \'buddyboss-wp-usermeta-sync\' ),
            ),
        );

        return (array) apply_filters( \'BB_WP_SYNC_get_settings_sections\', $settings );
    }
}

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

在此代码中:

if ($gender == \'his_Male\') {
    $wpgender = \'Male\';
} elseif ($gender = \'her_Female\') {
    $wpgender = \'Female\';
} else {
    $wpgender = \'Other\';
}
你不是在比较$gender\'her_Female\', 您正在将其设置为\'her_Female\':

} elseif ($gender = \'her_Female\') {
您应该使用===== (最好是===, 差异记录在案here).

您的第二个问题实际上是一个chrome php问题,而不是这里的主题。然而,我敢打赌,问题很可能是xprofile_updated_profile 钩子运行的时间不会在您查看时将任何内容记录到控制台。最好将所需的任何调试信息记录到文件中。error_log() 是最简单的方法,但也有一些库可以提供帮助。

SO网友:roly151

我更改了wordpress元性别数据以匹配BuddyBoss数据(即his\\u-Male、her\\u-Male、their\\u-Other),并删除了转换该数据的if语句,该函数现在按预期工作。我仍然很想理解为什么它对“其他人”不起作用。

function BB_WP_SYNC_update_wordpress_usermeta( $user_id, $posted_field_ids, $errors) {
    
    if ( empty( $user_id ) ) {
        $user_id = bp_loggedin_user_id();
    }

    if ( empty( $errors ) ) {
        $country = xprofile_get_field_data(\'Country\', $user_id);
        $region = xprofile_get_field_data(\'Regional Association / Federation\', $user_id);
        $gender = xprofile_get_field_data(\'Gender\', $user_id);
        $dob = xprofile_get_field_data(\'Date of Birth\', $user_id);
        
        update_user_meta($user_id, \'ofc_country\', $country);
        update_user_meta($user_id, \'ofc_regional_organisation\', $region);
        update_user_meta($user_id, \'ofc_gender\', $gender);
        update_user_meta($user_id, \'ofc_date_of_birth\', $dob);

    } else {
        ChromePhp::log($errors);
    }
}
add_action( \'xprofile_updated_profile\', \'BB_WP_SYNC_update_wordpress_usermeta\', 1, 3 );
我仍然在寻找能够查看php变量的解决方案(我的第二个问题)。提前谢谢!