wp_load_alloptions()
云策文档标注
概述
wp_load_alloptions() 函数用于加载并缓存所有自动加载的选项,如果不存在则加载所有选项。它支持通过参数控制是否强制更新本地缓存,并返回一个包含所有选项的数组。
关键要点
- 函数加载所有自动加载选项,若无则加载全部选项,并缓存结果以提高性能。
- 接受一个可选布尔参数 $force_cache,默认为 false,用于强制从持久缓存更新本地缓存。
- 内部使用 wp_cache_get() 和 wp_cache_add() 进行缓存管理,支持 WordPress 安装和多站点环境判断。
- 提供多个过滤器钩子,如 pre_wp_load_alloptions、pre_cache_alloptions 和 alloptions,允许开发者在不同阶段修改选项数据。
- 函数返回一个数组,键为选项名,值为选项值,便于直接操作。
代码示例
$all_options = wp_load_alloptions();
$my_options = array();
foreach ( $all_options as $name => $value ) {
if ( stristr( $name, '_transient' ) ) {
$my_options[ $name ] = $value;
}
}
print_r( $my_options );注意事项
- 在 WordPress 安装期间或多站点环境下,缓存行为可能受限,需注意 wp_installing() 和 is_multisite() 的影响。
- 使用 $force_cache 参数时,应谨慎以避免不必要的缓存更新开销。
- 过滤器钩子允许自定义选项加载逻辑,但需确保返回正确格式的数组以避免错误。
原文内容
Loads and caches all autoloaded options, if available or all options.
Parameters
$force_cachebooloptional-
Whether to force an update of the local cache from the persistent cache.
Default:
false
Source
function wp_load_alloptions( $force_cache = false ) {
global $wpdb;
/**
* Filters the array of alloptions before it is populated.
*
* Returning an array from the filter will effectively short circuit
* wp_load_alloptions(), returning that value instead.
*
* @since 6.2.0
*
* @param array|null $alloptions An array of alloptions. Default null.
* @param bool $force_cache Whether to force an update of the local cache from the persistent cache. Default false.
*/
$alloptions = apply_filters( 'pre_wp_load_alloptions', null, $force_cache );
if ( is_array( $alloptions ) ) {
return $alloptions;
}
if ( ! wp_installing() || ! is_multisite() ) {
$alloptions = wp_cache_get( 'alloptions', 'options', $force_cache );
} else {
$alloptions = false;
}
if ( ! $alloptions ) {
$suppress = $wpdb->suppress_errors();
$alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options WHERE autoload IN ( '" . implode( "', '", esc_sql( wp_autoload_values_to_autoload() ) ) . "' )" );
if ( ! $alloptions_db ) {
$alloptions_db = $wpdb->get_results( "SELECT option_name, option_value FROM $wpdb->options" );
}
$wpdb->suppress_errors( $suppress );
$alloptions = array();
foreach ( (array) $alloptions_db as $o ) {
$alloptions[ $o->option_name ] = $o->option_value;
}
if ( ! wp_installing() || ! is_multisite() ) {
/**
* Filters all options before caching them.
*
* @since 4.9.0
*
* @param array $alloptions Array with all options.
*/
$alloptions = apply_filters( 'pre_cache_alloptions', $alloptions );
wp_cache_add( 'alloptions', $alloptions, 'options' );
}
}
/**
* Filters all options after retrieving them.
*
* @since 4.9.0
*
* @param array $alloptions Array with all options.
*/
return apply_filters( 'alloptions', $alloptions );
}
Hooks
- apply_filters( ‘alloptions’, array $alloptions )
-
Filters all options after retrieving them.
- apply_filters( ‘pre_cache_alloptions’, array $alloptions )
-
Filters all options before caching them.
- apply_filters( ‘pre_wp_load_alloptions’, array|null $alloptions, bool $force_cache )
-
Filters the array of alloptions before it is populated.
Skip to note 2 content
Codex
Example
$all_options = wp_load_alloptions(); $my_options = array(); foreach ( $all_options as $name => $value ) { if ( stristr( $name, '_transient' ) ) { $my_options[ $name ] = $value; } } print_r( $my_options );