Wordpress 全局变量 $wpdb; 返回不需要的 'null' 文本

7 浏览
0 Comments

Wordpress 全局变量 $wpdb; 返回不需要的 'null' 文本

我正在使用带有JSON REST API插件的WordPress(http://wordpress.org/plugins/json-rest-api/)。\n我能够创建自定义的端点。在这种情况下,我创建了一个用于显示5个用户的端点。\n这是我的代码:\n

class JSON_API_Pmbs_Controller
{
  public function user_search()
  {
    global $wpdb;
    $query = "SELECT * FROM pmbsn_users LIMIT 0,3";
    $blogusers = $wpdb->get_results($query);
    $return_array = array();
    foreach ($blogusers as $user)
    {
        $avatar_url = get_avatar_url ( get_the_author_meta($user->ID), $size = '50' ); 
        $current_array = array(
            'thumbnail' => $avatar_url,
            'display_name' => $user->display_name,
            'user_url' => site_url().'/members/'.$user->user_login
            );
        array_push($return_array, $current_array);
    }
    $echo_json = json_encode($return_array, JSON_PRETTY_PRINT);
    echo $echo_json;
  }
}

\n这是JSON结果:\n[\n{\n \"thumbnail\": \"http:\\/\\/0.gravatar.com\\/avatar\\/?d=identicon&s=50\",\n \"display_name\": \"PMBS Admin\",\n \"user_url\": \"http:\\/\\/localhost\\/web_pmbsnetwork\\/members\\/pmbsadmin\"\n},\n{\n \"thumbnail\": \"http:\\/\\/0.gravatar.com\\/avatar\\/?d=identicon&s=50\",\n \"display_name\": \"Johan HS\",\n \"user_url\": \"http:\\/\\/localhost\\/web_pmbsnetwork\\/members\\/johan\"\n},\n{\n \"thumbnail\": \"http:\\/\\/0.gravatar.com\\/avatar\\/?d=identicon&s=50\",\n \"display_name\": \"Seno Adi W\",\n \"user_url\": \"http:\\/\\/localhost\\/web_pmbsnetwork\\/members\\/seno\"\n}\n]null\n\n你们可能会注意到JSON结果末尾有一个奇怪的“null”文本。\n经过调试,我发现这是由于global $wpdb引起的。\n我已经尝试了以下方法:\n

    \n

  1. 包含wp-load.php文件(http://wordpress.org/support/topic/wpdb-returning-null
  2. \n

  3. 包含所有(可能需要的)文件(Using WPDB in standalone script?
  4. \n

  5. 设置全局变量$wpdb = \"foo\"($wpdb is null even after \'global $wpdb
  6. \n

\n但都没有成功。我该如何删除JSON结果末尾的“null”文本?\n谢谢。

0
0 Comments

问题的原因是使用WordPress的全局变量$wpdb时出现了不需要的"null"文本。解决方法是卸载JSON REST API插件,创建一个新文件(例如:wordpress-root/api/get_user.php),将控制器方法中的脚本移动到get_user.php中,并将全局变量$wpdb替换为include('../wp-load.php')。这样,$wpdb中的奇怪的null文本就消失了。对于遇到这个问题的人,我强烈不建议使用我的解决方法,这只是一个快速而不规范的修复方法。

0
0 Comments

WordPress global $wpdb; 返回不想要的"null"文本的问题可能是由于非UTF-8数据引起的。为了解决这个问题,可以尝试以下方法:

1. 在SELECT查询之前加入以下代码:

$wpdb->query('SET CHARACTER SET utf8');

2. 如果第一种方法无效,可以按照这个答案中的步骤进行操作:https://stackoverflow.com/a/1972468/2718799

很抱歉,以上两种解决方案都没有奏效。我遇到的错误不是JSON的问题,而是$wpdb。如果我注释掉`echo $echo_json;`,它只会显示"null"而不会显示JSON。谢谢。

我不确定,但是请尝试在php 5.4+版本中使用`JSON_UNESCAPED_UNICODE`替代`JSON_PRETTY_PRINT`,看看能否解决问题。

0