在functions.php中使用Composer类

时间:2019-02-10 14:14:48

标签: wordpress composer-php

我正在尝试向我的Wordpress网站添加一个简码,以从Google电子表格中提取一段数据并将其放入页面中。为此,我尝试使用Sheetsu。 Sheetsu的php libraries通过Composer进行管理。

我有一个独立代码的工作片段,但是当我将其放到functions.php中时,就像这样...

function do_sheetsu() {
    require('vendor/autoload.php');
    use Sheetsu\Sheetsu;
    $sheetsu = new Sheetsu(['sheetId' => '8b297aa81110']);

    $response = $sheetsu->search(['id' => '2.05.1']);
    $collection = $response->getCollection();

    echo $collection->get(0)->answer;
    }
add_shortcode('sheetsu','do_sheetsu');

...它使我的网站空白。如果我在use Sheetsu\Sheetsu;行中注释掉,我的站点就会回来,但是我没有任何输出,并且我认为错误“ PHP致命错误:找不到类'Sheetsu'”完全合理。

显然,我了解足够多的php能够破坏事物,而我对Composer的了解主要来自于弄乱Flarum

我确定我在这里遗漏了一些明显的东西,我猜是在涉及名称空间声明之类的东西,但是我无法将各个部分放在一起。

我也在怀疑地查看我的composer.json文件-某些东西似乎不正确,但我不确定要解决什么。

记录下来,我的composer.json,composer.lock和vendor文件夹都在我的主题文件夹中,带有functions.php。我的composer.json文件看起来像这样:

{
    "require": {
        "emilianozublena/sheetsu-php": "^0.0.6"
    }
}

我不确定是否应该。

但是更麻烦的是找到一种绕过use Sheetsu\Sheetsu行的方法,该方法似乎完全破坏了Wordpress ...

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我假设在这里您已使用运行composer installcomposer require emilianozublena/sheetsu-php的命令行安装了软件包。

您不能在函数内部使用use php关键字。 use关键字必须在文件的最外部作用域(全局作用域)中声明。有关更多详细信息,请参考此答案here

因此,在这种情况下,您可以在实例化类时链接名称空间。在我们的情况下,new Sheetsu(['sheetId' => '8b297aa81110'])变为new \Sheetsu\Sheetsu(['sheetId' => '8b297aa81110']);

在下面尝试此代码

function do_sheetsu() {
    require('vendor/autoload.php');
    $sheetsu = new \Sheetsu\Sheetsu(['sheetId' => '8b297aa81110']);

    $response = $sheetsu->search(['id' => '2.05.1']);
    $collection = $response->getCollection();

    echo $collection->get(0)->answer;
}
add_shortcode('sheetsu','do_sheetsu');