WP_LOAD_ALLOPTIONS(): кэширование параметров WordPress

WP_LOAD_ALLOPTIONS() │ WP 2.2.0

Функция WP_LOAD_ALLOPTIONS() загружает и кэширует все автозагружаемые параметры (options), если они доступны, или все параметры, если их нет.

Использование

Эта функция используется вместе с функциями кэширования, такими как wp_cache_get() и wp_cache_add(). При первом вызове она может работать медленно, но после кэширования становится значительно быстрее.

Пример времени выполнения:

  • 1 раз — 0.003439 секунды (очень медленно)
  • 50000 раз — 0.05 секунды (очень быстро)

PHP версия: 7.0.32, WP версия: 5.1.1

Хуки (Hooks) функции

  • pre_wp_load_alloptions
  • pre_cache_alloptions
  • alloptions

Возвращаемое значение

Функция возвращает массив (Array). Этот массив содержит список всех параметров.

Как использовать

Для вызова функции используется следующий синтаксис:

wp_load_alloptions( $force_cache );
  • $force_cache (boolean): указывает, нужно ли принудительно обновить локальный кэш из постоянного кэша. Значение по умолчанию: false.

Примеры использования

1. Получение всех параметров сайта

Вы можете получить все параметры вашего сайта следующим образом:

$alloptions = wp_load_alloptions();

В результате переменная $alloptions будет содержать массив, похожий на следующий:

Array (
    [siteurl] => http://wp-kama.com/
    [blogname] => WordPress как на ладони
    [blogdescription] => Функции, советы и статьи для начинающих
    [users_can_register] => 1
    [admin_email] => admin@wp-kama.com
    [start_of_week] => 1
    [use_balanceTags] => 
    [require_name_email] => 1
    [comments_notify] => 
    [posts_per_rss] => 15
    [rss_use_excerpt] => 1
    [default_category] => 1
    [default_comment_status] => open
    [default_ping_status] => open
    ...
)

2. Получение всех временных параметров без временных ограничений

Если вы хотите получить все временные параметры, вы можете использовать следующий код:

$all_options = wp_load_alloptions();
$all_transients  = array();

foreach ( $all_options as $name => $value ) {
    if ( strstr( $name, '_transient' ) ) {
        $all_transients[ $name ] = $value;
    }
}

print_r( $all_transients );

Примечания

  • Глобальный объект: $wpdb – это объект абстракции базы данных WordPress.

Изменения в версии

  • С версии 2.2.0 — функция была введена.
  • С версии 5.3.1 — добавлен параметр $force_cache.

Код функции

Вот код функции wp_load_alloptions() из файла wp-includes/option.php:


function wp_load_alloptions( $force_cache = false ) {
global $wpdb;

$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() ) {
        $alloptions = apply_filters( 'pre_cache_alloptions', $alloptions );
        wp_cache_add( 'alloptions', $alloptions, 'options' );
    }
}

return apply_filters( 'alloptions', $alloptions );

}

Сопутствующие функции

  • add_option()
  • admin_url()
  • delete_option()
  • get_bloginfo()
  • get_home_path()
  • get_home_url()
  • get_option()
  • get_site_url()
  • home_url()
  • is_ssl()
  • site_url()
  • update_option()
  • wp_get_environment_type()

Таким образом, функция wp_load_alloptions() помогает разработчикам и пользователям WordPress получать и кэшировать параметры, что существенно ускоряет работу с сайтом.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *