我正在尝试向我的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 ...
感谢您的帮助!
答案 0 :(得分:0)
我假设在这里您已使用运行composer install
或composer 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');