WP 插件:为什么我需要依赖库?

WP plugin: Why do I need to require the dependencies of a library?

在 WordPress 插件中,这不起作用

<?php

/**
 * Plugin Name:       test
 * Plugin URI:        _
 * Description:       _
 * Version:           0.0.1
 * Author:            _
 * Author URI:        _
 * License:           GPL-2.0+
 * License URI:       _
 * Text Domain:       _
 */


// If this file is called directly, abort.
if (!defined('WPINC')) {
    die;
}

require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';

但这确实有效

require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';

class-wp-filesystem-direct 里面你可以看到它延伸自 class-wp-filesystem-base

为什么我需要要求这两个库?


错误是

Fatal error: Uncaught Error: Class 'WP_Filesystem_Base' not found in /home/..../domains/..../public_html/wp-admin/includes/class-wp-filesystem-direct.php:16 

require 语句完全按照预期工作,问题在于您要加载的内容。它具有未满足的依赖项,并且依赖于其他未加载的内容。

加载class-wp-filesystem-direct.php 将加载该文件中的内容,但不会搜索它需要的其他内容。 WordPress 不使用 PHP 自动加载

所以一些注意事项:

  • WP Admin 在 WordPress 中包含的文件不包含它们的所有依赖项
  • 如果您尝试加载继承自尚未加载的 class 的 class,您将收到致命错误
  • 您不应该尝试在插件顶部包含 WP Admin 文件,它可能会在前端加载时导致问题
  • 如果您想使用 WP_FileSystem,则不需要加载那些文件和文件夹

你的问题是你不能只在 WP Admin 中包含随机文件,它们有需要事先包含的依赖项。

所以你的 require 语句工作正常,