new-fang/loader

WordPress中文件加载器,使加载文件比使用require更简单

1.3.1 2019-10-30 17:34 UTC

This package is auto-updated.

Last update: 2024-09-22 15:05:34 UTC


README

允许以更简洁的语法从目录加载文件,并允许使用传递给文件的参数。从WeAreNolte的Lean\Loader包分叉。

优点

使用Loader包,而不是常规的get_template_part或任何其他WordPress默认函数来加载模板间的部分或文件,您将获得以下好处

  • 更清晰的文件和加载来源的语法。
  • 允许在加载的文件之间发送变量。
  • 为部分提供多组参数。
  • 保持DRY(不要重复自己)。

要求

为了使用此库,请确保您至少有以下内容。

安装

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 的工作方式相同,因此它可以在子主题和父主题中工作。
  • 将默认根设置为当前主题,以便更容易设置。