I';我正在尝试将Composer与WordPress插件结合使用

I';我正在尝试将Composer与WordPress插件结合使用,wordpress,composer-php,Wordpress,Composer Php,我的源文件是这样开始的: <?php /** * @package JpLists */ namespace Inc\Pages; use WP_List_Table; class ListTable extends WP_List_Table { 我正要认输,回到硬编码的require_once()调用,但是名称空间和自动加载的想法吸引了我。 我的composer.json文件如下所示: { "name": "jp/jp-lists", "descriptio

我的源文件是这样开始的:

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

use WP_List_Table;

class ListTable extends WP_List_Table {

我正要认输,回到硬编码的require_once()调用,但是名称空间和自动加载的想法吸引了我。

我的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"}
    }
}

Composer的自动加载程序将负责自动加载命名空间中的类(
Inc
)。您在加载
WP\u List\u Table
时遇到问题,但这不是您的类-它是WordPress核心类,您项目中的autolader甚至不会尝试加载它(因为它没有任何搜索它的定义)

此外,该类被标记为内部类,WordPress文档不鼓励在插件或主题中使用它。这可能就是默认情况下不可用的原因。如果您确实需要它,您应该手动要求它:

if (!class_exists('WP_List_Table')) {
    require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
}
或者只是用不同的名称将其复制到您的项目中并使用它,就像文档建议的那样:

此类的访问被标记为。这意味着它不适合插件和主题开发人员使用,因为在未来的WordPress发布中,它可能会在没有警告的情况下进行更改。如果您仍然希望使用该类,则应制作一份副本,以便与您自己的项目一起使用和分发,否则使用该类的风险由您自己承担


请将以下内容添加到composer.json

[示例: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 {
.....
但我不知道如何使用路径法



我之所以使用Google Translate,是因为我不能很好地理解英语。

事实证明,如果在名称前添加一个“\”,PHP就会知道您引用的是全局名称空间中的类,而不是文件开头指定的名称空间

use \WP_List_Table;

几个月来,我放弃了使用名称空间和composer的努力,但在认真研究名称空间之后,我决定再次解决这个问题,这是一个简单的解决办法。

谢谢你的建议。我曾尝试过您之前建议的代码修复,但最终还是出现了相同的错误。就私有类而言,警告之外还有这样一句话:然而,WP_List_Table类已经被插件和WordPress开发人员广泛使用,因为它提供了一种可靠、一致和语义的方法来在WordPress中创建自定义列表表。到目前为止,这个类中还没有发生重大变化,也没有计划发生重大变化,因此在WordPress开发的beta/RC阶段测试插件应该足以避免任何重大问题。
use \WP_List_Table;