Я пытаюсь использовать Composer с плагином WordPress - PullRequest
0 голосов
/ 13 сентября 2018

Мой исходный файл начинается так:

<?php
/**
 * @package JpLists
 */
namespace Inc\Pages;

use WP_List_Table;

class ListTable extends WP_List_Table {

При попытке расширить стандартный класс WordPress в браузере возникает следующая ошибка:

Fatal error: Class 'WP_List_Table' not found in /srv/www/wordpress/wp-content/plugins/jpLists/inc/Pages/ListTable.php on line 9

В этом посте предполагается, что плагины Composer + WordPress - плохая идея& автозагрузка обращается ко мне.

мой файл composer.json выглядит так:

{
    "name": "jp/jp-lists",
    "description": "WordPress plugin",
        "type": "wordpress-plugin",
    "license": "GPL",
    "authors": [
        {
            "name": "JP",
            "email": "jp@example.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {},
    "autoload": {
        "psr-4":{"Inc\\": "./inc"}
    }
}

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

Пожалуйста, добавьте следующее в composer.json.

[пример case: wp-content / plugins / example / src / composer.json]

"autoload": {
    "files": ["../../../../wp-admin/includes/class-wp-list-table.php"]
}

и Генерация файлов автозагрузки

composer dumpautoload

записать в файл класса

use WP_List_Table;
class Test_WP_List_table extentds WP_List_Table {
.....

но я не знаю, использовать метод ABSPATH


Я использую Google Translate, потому что плохо понимаю английский.

0 голосов
/ 06 ноября 2018

Оказывается, если вы просто добавите '\' перед именем, PHP знает, что вы ссылаетесь на класс в глобальном пространстве имен, а не на пространство имен, указанное в начале файла.

use \WP_List_Table;

Я отказался от своих попыток использовать пространства имен и композитор на пару месяцев, но после некоторого усердного изучения пространств имен я решил снова заняться проблемой, и это было простое решение.

0 голосов
/ 13 сентября 2018

Автозагрузчик Composer позаботится об автозагрузке классов в вашем пространстве имен (Inc).У вас проблема с загрузкой WP_List_Table, но это не ваш класс - это базовый класс WordPress, и автозагрузчик из вашего проекта даже не будет пытаться загрузить его (поскольку у него нет определения, где его искать).

Также этот класс помечен как внутренний, и документация WordPress не рекомендует использовать его в плагинах или темах.Это, вероятно, причина, почему он не доступен по умолчанию.Если вам это действительно нужно, вам нужно сделать это вручную:

if (!class_exists('WP_List_Table')) {
    require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
}

Или просто скопируйте его в свой проект под другим именем и используйте его, как рекомендует документация:

Этодоступ класса помечен как private .Это означает, что он не предназначен для использования разработчиками плагинов и тем, поскольку он может быть изменен без предупреждения в любом будущем выпуске WordPress.Если вы все еще хотите использовать этот класс, вы должны сделать копию для использования и распространения в своем собственном проекте или использовать ее на свой страх и риск.

https://codex.wordpress.org/Class_Reference/WP_List_Table

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...