函数文档

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

Return

array List of all options.

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.

Changelog

Version Description
5.3.1 The $force_cache parameter was added.
2.2.0 Introduced.

User Contributed Notes