当前位置: 首页 > 知识库问答 >
问题:

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

皇甫乐
2023-03-14

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

适用于本地的API路由:

  • http://wordpress.local/wp-json/wp-post-modal/v1/any-post-type?slug=modal-页

生产中的API路由示例(表明API路由确实存在):

    < Li > https://WP-post-modal . allure projects . com/WP-JSON/WP-post-modal/v1 < Li > https://sped form . com/WP-JSON/WP-post-modal/v1

应该在生产中使用的用法(但不要因为500错误):

  • https://wp-post-modal.allureprojects.com/wp-json/wp-post-modal/v1/any-post-type?slug=modal-内容
  • https://spedform.com/wp-json/wp-post-modal/v1/any-post-type?slug=privary-政策

我检查了服务器上的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;

}

共有2个答案

齐财
2023-03-14

尝试将< code > get _ content _ by _ slug()中的第一行更新为:

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

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

松德曜
2023-03-14

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

我调整后的代码如下所示:

include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( 'js_composer/js_composer.php' ) ) {
    WPBMap::addAllMappedShortcodes();
}
 类似资料:
  • 我部署基本Laravel项目到服务器。当我点击我的域名,它返回默认的欢迎视图。当我把简单的道路(见下文)添加到代码中,并尝试在浏览器中输入该路线时,它会返回500个内部错误。除"/"根路由外,所有路由都返回500错误。 文件夹结构: Laravel文件位于Laravel目录中,但来自公共目录的文件位于api目录中。 .api目录中的htaccess文件: 存储目录和其中的所有内容对任何人都是可写、

  • 在Swoole::$php->runMVC() 调用之前可以修改默认的路由函数。 Swoole::$php->router(function(){ return array('controller' => 'YourController', 'view' => 'YourView'); }); Swoole::$php->runMVC(); 设置后将使用制定的函数作为路由,路由函数务必要

  • phpGrace 追求极致的效率,我们并不认同在url的基础上继续进行复杂的正则匹配是一种高效的、明智的选择!方便的调用规则比不上轻快的效率!所以我们并不建议您使用复杂的路由规则!尽管如此为了满足开发者的需求和习惯我们还是开放了简单路由!在入口页开启路由配置 <?php define('PG_ROUTE', true);//在框架核心文件引用前定义 include 'phpGrace/phpGra

  • 英文原文: http://emberjs.com/guides/routing/defining-your-routes/ 当启动你的应用时,路由器会负责展示模板,载入数据,以及设置应用状态等任务。 这些都是通过将当前的URL与你定义的路由进行匹配来实现的。 1 2 3 4 App.Router.map(function() { this.route("about", { path: "/a

  • SOFARPC 中对服务地址的选择也抽象为了一条处理链,由每一个 Router 进行处理。同 Filter 一样, SOFARPC 对 Router 提供了同样的扩展能力。 @Extension(value = "customerRouter") @AutoActive(consumerSide = true) public class CustomerRouter extends Router

  • 例如:产品详细信息页面可能有一个标签式导航部分,默认显示产品概述。 当用户单击“技术规格”选项卡时,该部分将显示规格。 如果用户点击ID为3的产品,我们要显示产品详细信息页面,其中包含概述: 当用户点击 “Technical Specs”: localhost:3000/product-details/3/specs overview 和 specs 作为 product-details/:id的