screenfeed / autowpoptions
管理一组WordPress选项。
v1.0.1
2021-02-03 15:34 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- php: ^7.1
- automattic/phpcs-neutron-standard: *
- brain/monkey: ^2.0
- dealerdirect/phpcodesniffer-composer-installer: *
- phpcompatibility/phpcompatibility-wp: *
- phpmetrics/phpmetrics: *
- phpunit/phpunit: ^7.0
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: *
- szepeviktor/phpstan-wordpress: *
- wp-coding-standards/wpcs: *
This package is auto-updated.
Last update: 2024-09-10 19:38:02 UTC
README
允许管理WordPress中的一组选项。
需要 php 5.4 和 WordPress 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
类
- 两个关键词
myplugin
和settings
用于钩子名称,例如过滤器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
。