Пользовательский маршрут WordPress API возвращает ошибку 500

Дело в том, что я создал собственный маршрут 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;

}

person Allure Web Solutions    schedule 14.08.2017    source источник


Ответы (2)


Я понял, что мне нужно проверить, установлен ли Visual Composer, а не просто предположить WPBMap::addAllMappedShortcodes();

Мой скорректированный код выглядит так:

include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( 'js_composer/js_composer.php' ) ) {
    WPBMap::addAllMappedShortcodes();
}
person Allure Web Solutions    schedule 16.08.2017

Попробуйте обновить первую строку в get_content_by_slug() следующим образом:

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

Я предполагаю, что у вас есть WPBMap библиотека или плагин локально, но он недоступен на рабочих сайтах.

person Pete Nelson    schedule 16.08.2017