在wordpress中调用未定义的函数get_user_meta()

时间:2017-10-05 10:09:40

标签: php ajax wordpress

我在wordpress主题文件夹中有一个文件。在该文件中,我想在该文件中使用get_user_meta()update_user_meta函数。需要包括哪些内容。因为得到错误:

  

调用未定义的函数get_user_meta()

require( dirname( __FILE__ ) . '/../../wp-load.php' );

global $current_user;

wp_get_current_user();

$user_id= $current_user->ID;    

$user_data = get_user_meta($user_id);
$prev_reward_points = $user_data['reward_points'];
$new_reward_points = $prev_reward_points + 1000;

update_user_meta($user_id,"reward_points",$new_reward_points,$prev_reward_points);

echo "success";

exit;

2 个答案:

答案 0 :(得分:2)

将以下行放在您文件的开头。而不是

require( dirname( FILE ) . '/../../wp-load.php' ); 

放在代码下面

include_once('../../../wp-load.php');

我可以知道您使用的原因,因为不需要在不创建任何自定义文件的情况下完成所有操作。

答案 1 :(得分:0)

如果此文件位于主题文件夹中,则无需包含wp-load.php - 而是" right"遵循WordPress最佳实践的方法是:

  1. 在主题中需要此文件(在主题的function.php文件中,添加require_once 'this_file.php';
  2. 将现有代码放在函数中(请参阅下文 - 我已做了一些更改以防止代码中出现错误。)
  3. 然后,以最适合您需要的方式触发此功能。由于您无法解释您正在做什么,因此很难知道如何在这方面为您提供指导。

    function calculate_new_reward_points() {
    
        global $current_user;
    
        wp_get_current_user();
    
        $user_id= $current_user->ID;
    
        // no need to do this way... simplified version below
        // $user_data = get_user_meta($user_id);
    
        // see documentation for get_user_meta - can load the value directly
        $prev_reward_points = (int)get_user_meta( $user_id, 'reward_points', TRUE );     
    
        $new_reward_points = $prev_reward_points + 1000;
    
        // This will NOT store two values the way you have done it - based on your code above, I've modified this line below to work properly
        // update_user_meta($user_id, "reward_points", $new_reward_points, $prev_reward_points);
        update_user_meta($user_id, "reward_points", $new_reward_points );
    
        echo "success";
    }
    
  4. 现在,您只需致电calculate_new_reward_points();,而不是最初调用该文件的任何地方,而且您已完成。