自定义WordPress API路由返回500错误

时间:2017-08-14 14:35:57

标签: php json wordpress rest wordpress-rest-api

故事是我创建了一个自定义API路由/wp-post-modal/v1/any-post-type,可以提取任何帖子类型的帖子。在本地它完美地工作(MAMP),但在多个生产服务器(不同的环境)上它返回500错误。

适用于本地的API路线:

生产中的API路线示例(显示API路线确实存在):

应该适用于生产的用法(但不要因为500错误):

我检查了服务器上的nginx错误日志,它们是空的。

自定义API路由的代码:

/**
 * Register API Route: Query Any Post Type
 */
public function any_post_api_route() {

    register_rest_route( $this->plugin_name . '/v1', '/any-post-type/', array(
        'methods'  => 'GET',
        'callback' => array( $this, 'get_content_by_slug' ),
        'args'     => array(
            'slug' => array(
                'required' => false
            )
        )
    ) );

}

/**
 *
 * Get content by slug
 *
 * @param WP_REST_Request $request
 *
 * @return WP_REST_Response
 */
public function get_content_by_slug( WP_REST_Request $request ) {
    WPBMap::addAllMappedShortcodes();

    // get slug from request
    $slug = $request['slug'];

    // get title by slug
    $return = get_page_by_path( $slug, ARRAY_A, array( 'page', 'post' ) );

    // render shortcodes from Visual Composer
    $return['post_content'] = apply_filters( 'the_content', $return['post_content'] );

    $response = new WP_REST_Response( $return );

    return $response;

}

2 个答案:

答案 0 :(得分:0)

尝试将get_content_by_slug()中的第一行更新为:

if ( class_exists( 'WPBMap' ) ) {
    WPBMap::addAllMappedShortcodes();
}

我的猜测是您在本地拥有WPBMap库或插件,但它在生产网站中不可用。

答案 1 :(得分:0)

我意识到我需要检查是否安装了Visual Composer而不是假设WPBMap::addAllMappedShortcodes();

我调整后的代码如下:

include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( 'js_composer/js_composer.php' ) ) {
    WPBMap::addAllMappedShortcodes();
}