我应该加载和使用WP_Filessystem的哪些依赖项?

时间:2020-08-05 作者:ralphjsmit

我正在构建一个Wordpress主题WP_Filesystem 调用它:

<?php $wp_filesystem = new WP_Filesystem_Direct(null);
        echo $wp_filesystem->get_contents(get_stylesheet_directory() . \'/assets/images/Search_Glyph.svg\'); ?>
我知道WP_Filesystem 需要一些依赖项。我现在就这样把它们装进去functions.php:

require_once ABSPATH . \'wp-admin/includes/class-wp-filesystem-base.php\';
require_once ABSPATH . \'wp-admin/includes/class-wp-filesystem-direct.php\';
我不知道这是否是加载文件系统依赖项的正确方法。我找到了另一个question 对于插件开发,经过一些研究,我编写了以下代码,这些代码也很有效:

require_once ( ABSPATH . \'/wp-admin/includes/file.php\' );
WP_Filesystem();
加载WP_Filesystem? 第一个还是第二个代码部分?或者我是否应该使用其他代码?

对我来说,这似乎是第二次,因为WP_Filesystem() 是一个Wordpress函数,但我不知道它到底做什么。

非常感谢!

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

加载WP_Filesystem?第一个还是第二个代码部分?

  1. WP_Filesystem() 与全局$wp_filesystem 变量,因此如果使用它,则应使用第二个代码部分。

    WP_Filesystem() 必须打电话给全球$wp_filesystem 变量已正确初始化/设置,即使用正确的类实例或文件系统方法分配(请参阅get_filesystem_method(), 默认为WP_Filesystem_Direct).

    如果您没有使用全局$wp_filesystem 变量,则可以使用第一个变量手动加载依赖项,这些依赖项由WP_Filesystem().

    使用全局$wp_filesystem 变量:

    global $wp_filesystem;
    
    // Make sure that the above variable is properly setup.
    require_once ABSPATH . \'wp-admin/includes/file.php\';
    WP_Filesystem();
    
    // Check whether a file/directory exists.
    $exists = $wp_filesystem->exists( \'/some/path/here\' );
    var_dump( $exists );
    
    // Get file content.
    $data = $wp_filesystem->get_contents( \'path/to/file\' );
    var_dump( $data );
    
    使用自定义变量的示例:

    require_once ABSPATH . \'wp-admin/includes/class-wp-filesystem-base.php\';
    require_once ABSPATH . \'wp-admin/includes/class-wp-filesystem-direct.php\';
    
    $filesystem = new WP_Filesystem_Direct( false );
    
    var_dump( $filesystem->exists( \'/some/path/here\' ) );
    

相关推荐

$wp_FILESYSTEM返回空。依赖关系是什么?

我需要获取对$wp\\u filesystem对象的引用。在下面的测试中,var\\u dump($wp\\u filesystem)返回NULL。要正确设置$wp\\U文件系统,还需要哪些其他文件?我一直在期待,因为它在文件中调用。php,加载该文件就足以加载该对象。<?php require(\'../../../wp-blog-header.php\'); require(\'../../../wp-admin/includes/file.php\'); $m