screenfeed/autowpoptions

管理一组WordPress选项。

v1.0.1 2021-02-03 15:34 UTC

This package is auto-updated.

Last update: 2024-09-10 19:38:02 UTC


README

允许管理WordPress中的一组选项。

需要 php 5.4WordPress 4.4

您将能够做什么

  • 决定在多站点环境中您的选项集是在网络范围内还是在站点范围内
  • 显然,获取/设置/删除值
  • 提供默认值和重置值
  • 自动转换、清理和验证值
  • 创建一个升级过程

如何安装

使用composer

"require": {
	"screenfeed/autowpoptions": "*"
},

如何使用

创建一个扩展 Sanitization\AbstractSanitization 的类。此类将包含以下内容

默认值

必需。当选项尚未设置值时使用。它们的类型用于决定如何转换值。

重置值

可选。如果整个选项集尚未存在,则使用重置值。有时您可能希望它们与默认值不同。对于缺少的重置值,使用默认值。
您还可以在“重置选项”过程中使用它们。

清理方法

必需。在获取/更新选项时运行。

验证方法

必需(但如果不必要,可以简单地返回条目)。在更新时对所有选项运行一次。允许根据其他值编辑某些值,例如。

两个作为类属性的键词

必需。它们用于钩子名称。

示例

如何创建一个存储在WordPress选项表中的数组选项

  • 选项名称是 myplugin_settings
  • 当前插件版本是 2.3
  • 在多站点安装中,选项必须是网络范围的。
use Screenfeed\AutoWPOptions\Storage\WpOption;
use Screenfeed\AutoWPOptions\Options;

$option_name    = 'myplugin_settings';
$network_wide   = true;
$plugin_version = '2.3';

$options_sanitization = new MyOptionsSanitization( $plugin_version );
$options_storage      = new WpOption( $option_name, $network_wide );
$options              = new Options( $options_storage, $options_sanitization );

$foobar = $options->get( 'foobar' ); // Returns an array of positive integers.

MyOptionsSanitization

  • 两个关键词 mypluginsettings 用于钩子名称,例如过滤器 get_myplugin_settings_foobar
use Screenfeed\AutoWPOptions\Sanitization\AbstractSanitization;

class OptionSanitization extends AbstractSanitization {

	/**
	 * Prefix used in hook names.
	 *
	 * @var string
	 */
	protected $prefix = 'myplugin';

	/**
	 * Suffix used in hook names.
	 *
	 * @var string
	 */
	protected $identifier = 'settings';

	/**
	 * The default values.
	 * These are the "zero state" values.
	 * Don't use null as value.
	 *
	 * @var array<mixed>
	 */
	protected $default_values = [
		'foobar' => [],
		'barbaz' => 0,
	];

	/**
	 * Sanitizes and validates an option value. Basic casts have been made.
	 *
	 * @param  string $key     The option key.
	 * @param  mixed  $value   The value.
	 * @param  mixed  $default The default value.
	 * @return mixed
	 */
	protected function sanitize_and_validate_value( $key, $value, $default ) {
		switch ( $key ) {
			case 'foobar':
				return is_array( $value ) ? array_unique( array_map( 'absint', $value ) ) : [];
			case 'barbaz':
				return absint( $value );
		}

		return false;
	}

	/**
	 * Validates all options before storing them. Basic sanitization and validation have been made, row by row.
	 *
	 * @param  array<mixed> $values The option value.
	 * @return array<mixed>
	 */
	protected function validate_values_on_update( array $values ) {
		if ( ! in_array( $values['barbaz'], $values['foobar'], true ) ) {
			$values['barbaz'] = $this->default_values['barbaz'];
		}
		return $values;
	}
}

“升级过程”是什么意思?

实例化 MyOptionsSanitization 时使用的插件版本存储在选项中,并可以在未来的插件版本中用于升级过程。
例如

$site_version = $options->get( 'version' );

if ( version_compare( $site_version, '1.2' ) < 0 ) {
	$options->set( [ 'barbaz', 8 ] );
}

$options->set( [ 'version', '2.5' ] );

保留关键词

不要使用以下关键词作为选项键,因为它们用于内部

  • cached
  • version

扩展

您可能希望将选项存储在WordPress选项表之外,可能是在配置文件中(嘿,为什么不呢)。此包设计得可以这样。
为此,您需要创建一个类来替换 Screenfeed\AutoWPOptions\Storage\WpOption 并实现 Screenfeed\AutoWPOptions\Storage\StorageInterface