Плагин WP: зачем мне требовать зависимости библиотеки? - PullRequest
0 голосов
/ 18 февраля 2020

В плагине 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 

1 Ответ

1 голос
/ 18 февраля 2020

Оператор require работает точно так, как и предполагалось, проблема в том, что вы загружаете. У него есть неудовлетворенные зависимости и другие не загруженные вещи.

Загрузка class-wp-filesystem-direct.php загрузит вещи в этом файле, но не будет go искать другие вещи, которые ему нужны. WordPress не использует PHP автозагрузку

Так что некоторые заметки:

  • WP Admin включает файлы в WordPress не содержат все их зависимости
  • Если вы попытаетесь чтобы загрузить класс, который наследуется от класса, который не был загружен, вы получите фатальную ошибку
  • Вы не должны пытаться включать файлы WP Admin в верхнюю часть вашего плагина, это может привести к проблемы при загрузке в веб-интерфейсе
  • Если вы хотите работать с WP_FileSystem, вам не нужно загружать эти файлы и папки

Ваша проблема в том, что вы не можете просто включить случайные файлы в WP Admin, они имеют зависимости, которые должны быть включены заранее.

Таким образом, ваш оператор require работает нормально,

...