故事是我创建了一个自定义API路由/wp-post-modal/v1/any-post-type
,可以提取任何帖子类型的帖子。在本地它完美地工作(MAMP),但在多个生产服务器(不同的环境)上它返回500错误。
适用于本地的API路线:
生产中的API路线示例(显示API路线确实存在):
应该适用于生产的用法(但不要因为500错误):
我检查了服务器上的nginx错误日志,它们是空的。
/**
* 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;
}
答案 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();
}