Custom route and query

时间:2019-01-22 作者:Joel Scalera

我正在尝试使用自定义WordPress路由和函数,但我得到一个路由和函数未找到错误。下面是我的代码,但我不确定它在哪里被破坏:

add_action(\'rest_api_init\', function () {
 register_rest_route( \'boss/v1/latest-quiz-results\',array(
            \'methods\'  => \'GET\',
            \'callback\' => \'get_latest_quiz_results\'
  ));
});
function get_latest_quiz_results() {
 $query = $wpdb->prepare(
 "SELECT post_id, 
   5PxenC_learndash_user_activity_meta.activity_meta_key, 
   5PxenC_learndash_user_activity_meta.activity_meta_value, 
   5PxenC_learndash_user_activity.activity_id, user_id, course_id
  FROM 5PxenC_learndash_user_activity
 INNER JOIN 5PxenC_learndash_user_activity_meta ON 5PxenC_learndash_user_activity_meta.activity_id = 5PxenC_learndash_user_activity.activity_id
  WHERE 5PxenC_learndash_user_activity_meta.activity_meta_key = \'pass\'");
$results = $wpdb->get_results($query);
if (empty($results)) {
return new WP_Error( \'empty_category\', \'there is no quiz data\', 
array(\'status\' => 404) );

}

$response = new WP_REST_Response($results);
$response->set_status(200);

 return $results;
 }

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

您的代码有3个问题:

注册自定义REST API路由的正确语法如下:

register_rest_route( $namespace, $base_URL, $args, $override );
因此:

register_rest_route( \'boss/v1\', \'/latest-quiz-results\', array(
    \'methods\'  => \'GET\',
    \'callback\' => \'get_latest_quiz_results\'
) );
请咨询reference 了解更多信息。

中的get_latest_quiz_results(), $wpdb 未定义,因为缺少global $wpdb; 在顶部:

function get_latest_quiz_results() {
    global $wpdb; // Add this.
    ...

    return $results;
}
也在get_latest_quiz_results(), 你打错电话了wpdb::prepare() —第二个parameter 是必需的,并且需要至少有一个占位符(例如。%s). 例如:

$query = $wpdb->prepare( "SELECT ... WHERE 5PxenC_learndash_user_activity_meta.activity_meta_key = %s", \'pass\' );