new-fang / loader
WordPress中文件加载器,使加载文件比使用require更简单
Requires
- php: >=5.4.0
Requires (Dev)
README
允许以更简洁的语法从目录加载文件,并允许使用传递给文件的参数。从WeAreNolte的Lean\Loader包分叉。
优点
使用Loader包,而不是常规的get_template_part
或任何其他WordPress
默认函数来加载模板间的部分或文件,您将获得以下好处
- 更清晰的文件和加载来源的语法。
- 允许在加载的文件之间发送变量。
- 为部分提供多组参数。
- 保持DRY(不要重复自己)。
要求
为了使用此库,请确保您至少有以下内容。
- PHP 5.6
- composer:
安装
composer require moxie-lean/loader
用法
您需要确保包含composer的autoload.php
文件,以便可以使用其他包中的函数。
// functions.php include_once( get_stylesheet_directory() . '/vendor/autoload.php' );
<?php // File: index.php use NewFang\Load; $args = [ 'title' => get_the_title(), 'url' => get_the_permalink(), 'target' => '_blank' ]; Load::partials( 'single', $args );
该函数至少接受两个参数
-
$file
,在上面的例子中single
。这是要加载的文件名。扩展名是可选的,在这种情况下,我们希望从partials
目录加载single.php
文件,您可以为目录创建别名(更多信息请见别名),以使用该目录的不同名称。 -
...$args
,一个关联数组,包含我们想要传递给加载文件的值,该数组可以包含任意数量的元素,只要它是有效的关联数组。这些值通过$args
变量在加载的文件中可用,可以使用以下方式使用
您可以根据需要发送任意数量的参数集,最后所有参数集都会合并成一个,使用wp_parse_args
创建一个单一集。
<?php // File: partials/single.php // All loaded files have an $args variable that is used to store all the params // passed from where the Load function was used. ?> <a href="<?php echo esc_url( $args['url'] ); ?>" target="<?php echo esc_attr( $args['target'] ); ?>"> <?php echo esc_html( $args['title'] ); ?> </a>
多组参数。
<?php use NewFang\Load; $set_1 = [ 'a' => 1, 'b' => 5, 'c' => 3 ]; $set_2 = [ 'a' => 10, 'd' => 3 ]; $set_3 = [ 'd' => 10, 'c' => 2, 'r' => 3, ]; // You can have as many sets as you want. Load::partials( 'single', $set_1, $set_2, $set_3 ) ?>
提示
设置默认值
您可以通过设置默认值来确保始终有预期的参数在部分中,或者有可能是可选的值,例如
<?php // File: partials/single.php // The following lines creates an array with default values. If those values // are not specified when the file is loaded this values are going to be used instead. $defaults = [ 'url' => '', 'title' => '', 'target' => '_self', ] // Update $args with the initial $args mixed with the $default values. $args = wp_parse_args( $args, $defaults ); ?> <a href="<?php echo esc_url( $args['url'] ); ?>" target="<?php echo esc_attr( $args['target'] ); ?>"> <?php echo esc_html( $args['title'] ); ?> </a>
如果没有预期值,则不渲染。
在某些情况下,您预期一个必需的值,如果该值不存在,您不希望渲染该特定组件,在这些情况下,最好是避免渲染该组件,为了做到这一点,您可以在模板的任何位置返回,以避免执行以下行,例如
<?php // File: partials/single.php // The following lines creates an array with default values. If those values // are not specified when the file is loaded this values are going to be used instead. $defaults = [ 'url' => '', 'title' => '', 'target' => '_self', ] // Update $args with the initial $args mixed with the $default values. $args = wp_parse_args( $args, $defaults ); // Don't render if the title or url are empty. if ( empty( $args['title'] || empty( $args['url'] ) ) ) { return; } ?> <a href="<?php echo esc_url( $args['url'] ); ?>" target="<?php echo esc_attr( $args['target'] ); ?>"> <?php echo esc_html( $args['title'] ); ?> </a>
过滤器
有几个过滤器可以使用来扩展加载器的默认功能。您可以将所有过滤器放在主题的functions.php
文件或任何插件文件中。
注册查找文件的目录。
默认情况下,加载器将在主题的根目录中查找,但如果您有一个如下的文件结构
index.php
functions.php
|- views
|-|- partials
|-|-|- single.php
|-|-|- button.php
要从views
目录加载文件,您可以使用
<?php use NewFang\Load; $arguments = []; Load::views( 'partials/single', $arguments ); Load::views( 'partials/button', $arguments ); ?>
或者,如果您想避免每次都输入partials/
,您可以使用loader_directories
过滤器将新目录包含到搜索路径中,例如
add_filter( 'loader_directories', function( $directories ){ $directories[] = get_template_directory() . '/views'; return $directories; });
通过此更改,现在您可以编写如下内容
<?php use NewFang\Load; $arguments = []; Load::partials( 'single', $arguments ); Load::partials( 'button', $arguments ); ?>
注册别名
别名用于您想要以不同名称访问目录的情况,例如,如果您想使用Load::blocks
而不是Load::partials
来访问目录,您可以重命名目录,但为了避免这样做,您可以通过loader_alias
过滤器轻松创建别名来以不同的方式调用目录,如下面的示例所示
add_filter('loader_alias', function( $alias ){ $alias['partials'] = 'blocks'; return $alias; });
您只需将 key
指定到您想要创建别名并赋值的 $alias
变量中,然后给 $alias[ key ]
赋予您想要创建的别名。
这将给出如下语法
<?php use NewFang\Load; $arguments = []; Load::blocks( 'single', $arguments ); ?>
路线图
- 与
get_template_part
的工作方式相同,因此它可以在子主题和父主题中工作。 - 将默认根设置为当前主题,以便更容易设置。