Wordpress 全局变量 $wpdb; 返回不需要的 'null' 文本
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
- 包含wp-load.php文件(http://wordpress.org/support/topic/wpdb-returning-null)
- 包含所有(可能需要的)文件(Using WPDB in standalone script?)
- 设置全局变量$wpdb = \"foo\"($wpdb is null even after \'global $wpdb)
\n
\n
\n
\n但都没有成功。我该如何删除JSON结果末尾的“null”文本?\n谢谢。
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`,看看能否解决问题。