Laravel 5.4 和 WordPress 4.7 的辅助函数 __() 冲突

Posted

技术标签:

【中文标题】Laravel 5.4 和 WordPress 4.7 的辅助函数 __() 冲突【英文标题】:Laravel 5.4 and WordPress 4.7 conflict in helper function __() 【发布时间】:2017-06-27 10:02:07 【问题描述】:

我正在使用 Laravel 开发一个网站,其中一个 WordPress 博客部分并行且独立地运行。 自 Laravel 5.3 以来,一切运行顺利,使用服务提供商,我能够在 require_once() 调用中包含“wp-load.php”,并使用所有开箱即用的 WordPress 功能并获取/更新 WordPress 帖子。 不幸的是,在 Laravel 5.4 中定义了辅助函数 __(),这会与 l10n.php 中声明的相同 WP 函数产生冲突。 我尝试使用命名空间,但没有运气。 这是我的服务提供者的代码:

<?php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class WordPressServiceProvider extends ServiceProvider


    /**
     * Path to our WP installation
     *
     * @var string
     */
    protected $bootstrapFilePath = '/wp-paths/wp-it-news/wp-load.php';

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    
        //
    

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    
        if (\File::exists(public_path() . $this->bootstrapFilePath))
        
            require_once(public_path() . $this->bootstrapFilePath);
        
    


【问题讨论】:

好吧,如果您尝试将一个系统的代码包含到另一个系统中,我不会称之为“独立运行”。除了修改其中一个的代码之外,您对此无能为力。我建议您使用 WordPress Rest API 让您的 Laravel 与您的 WP 进行通信,而不是像您现在一直在做的那样,基本上只是将他们的代码库放在一起并希望获得最好的结果。 @CBroe 使用 WordPress Rest API 会产生至少一个额外的请求,对吧?我想避免这种情况,唯一的另一种方法是直接访问数据库。我是不是走投无路了? 【参考方案1】:

您可以在 bootstrap/autoload.php 中的 vendor/autoload.php 之前包含 wp-load.php

【讨论】:

【参考方案2】:

按照 Cbroe 的建议,我最终使用了 WordPress API。

Docs here

curl -X OPTIONS -i http://demo.wp-api.org/wp-json/wp/v2/posts

【讨论】:

请从链接中添加一些内容

以上是关于Laravel 5.4 和 WordPress 4.7 的辅助函数 __() 冲突的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.4 迁移问题

Laravel 5.4 “MethodNotAllowedHttpException”(基本任务列表)

laravel 5.4 中两种不同的身份验证模型

Laravel 5.4 事件广播不适用于 vuejs

如何将 Laravel 5.4 与 Angular 4 集成

无法将 Laravel 连接到 MailChimp(laravel 5.4)