Использование класса Composer в functions.php - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь добавить шорткод на свой сайт Wordpress, чтобы извлечь данные из электронной таблицы Google и поместить их на страницу.Для этого я пытаюсь использовать Sheetsu . php библиотеки для Sheetsu управляются через 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 голосов
/ 10 февраля 2019

Я предполагаю, что здесь вы установили пакет с помощью командной строки, используя composer install или composer require emilianozublena/sheetsu-php.

Вы не можете использовать ключевое слово use php внутри функции.Ключевое слово use должно быть объявлено во внешней области файла (глобальной области).За подробностями обращайтесь к этому ответу здесь

Таким образом, в этом состоянии вы можете связать пространство имен при создании экземпляра вашего класса.В нашем случае 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...