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


Wordpress global $wpdb; returns unwanted 'null' text

我使用wordpress与JSON REST API插件(http://wordpress.org/plugins/json-rest-api/)。

我可以创建我的自定义端点。在本例中,我创建了显示5个用户的端点。

这是我的代码:

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;
  }
}

JSON结果:

[
{
    "thumbnail": "http:'/'/0.gravatar.com'/avatar'/?d=identicon&s=50",
    "display_name": "PMBS Admin",
    "user_url": "http:'/'/localhost'/web_pmbsnetwork'/members'/pmbsadmin"
},
{
    "thumbnail": "http:'/'/0.gravatar.com'/avatar'/?d=identicon&s=50",
    "display_name": "Johan HS",
    "user_url": "http:'/'/localhost'/web_pmbsnetwork'/members'/johan"
},
{
    "thumbnail": "http:'/'/0.gravatar.com'/avatar'/?d=identicon&s=50",
    "display_name": "Seno Adi W",
    "user_url": "http:'/'/localhost'/web_pmbsnetwork'/members'/seno"
}
]null

你们可能会注意到在json结果的末尾有一个奇怪的'null'文本。

经过调试,我发现这是来自global $wpdb

我一直在做:

  1. 包含wp-load.php (http://wordpress.org/support/topic/wpdb-returning-null)
  2. 包括所有(可能需要)文件(使用WPDB在独立脚本?)
  3. 设置global $wpdb = "foo" ($wpdb即使在'global $wpdb之后也是空的)

但是没有成功。我如何在JSON结果的末尾删除空文本?

谢谢。

我认为问题是你的非utf8数据。

  1. 尝试将此代码放在SELECT查询之前。

    $wpdb->query('SET CHARACTER SET utf8');
    
  2. 如果您的问题没有解决,请按照以下答案中的步骤操作:https://stackoverflow.com/a/1972468/2718799

最后我做了一个很脏的方法;

  • 卸载JSON REST API插件
  • 创建新文件(例如:wordpress-root/api/get_user.php)
  • 将控制器方法中的脚本移动到get_user.php
  • include('../wp-load.php');代替global $wpdb

然后$wpdb中奇怪的空文本就消失了。

对于那些经历过这个问题的人,我强烈不推荐我的答案,这只是一个快速的肮脏修复。