Фільтр: esl/активні_шаблони

Модифікуйте шаблони, застосовані на сторінці, програмним способом (@since 1.8.4)

Це альтернатива встановленню активного шаблону через фільтр esl/screen_conditions/spros.

Зверніть увагу, що цей фільтр виконується після esl/screen_conditions/spros

Приклад: Не використовувати одиночний шаблон, якщо пост було відредаговано за допомогою Esl

У цьому прикладі ми хочемо виключити одиночний пост з використання шаблону, якщо він містить дані Esl (Редагувати за допомогою Esl).

add_filter( 'esl/active_templates', 'set_my_active_templates', 10, 3 );function set_my_active_templates( $active_templates, $post_id, $content_type ) {// Запустіть мою логіку тільки на передньому країif ( ! esl_is_frontend() ) {return $active_templates;}// Повернути, якщо одиночний пост $content_type не 'content'if ( $content_type !== 'content' ) {return $active_templates;}// Повернути: тип поточного поста не 'post'$post_type = get_post_type( $post_id );if ( $post_type !== 'post' ) {return $active_templates;}/*** $active_templates є масивом з різними важливими ключами** $active_templates['header'] - це ID шаблону заголовка, встановіть його на 0, якщо не хочете використовувати жоден шаблон* $active_templates['content'] - це ID шаблону вмісту, встановіть його на ID поточного поста, якщо не хочете використовувати жоден шаблон* $active_templates['footer'] - це ID шаблону нижнього колонтитула, встановіть його на 0, якщо не хочете використовувати жоден шаблон** $active_templates['search'] - це ID шаблону пошуку, буде використовуватися тільки якщо $content_type 'search'* $active_templates['archive'] - це ID шаблону архіву, буде використовуватися тільки якщо $content_type 'archive'* $active_templates['error'] - це ID шаблону помилки, буде використовуватися тільки якщо $content_type 'error'*/// Перевірте, чи має поточний пост дані Esl, повертає значення є масивом$esl_data = EslDatabase::get_data( $post_id, 'content' );if ( count( $esl_data ) > 0 ) {// Має дані Esl: Не використовуйте жоден шаблон, встановіть $active_templates['content'] на ID поточного поста$active_templates['content'] = $post_id;// Щоб відключити заголовок & нижній колонтитул (наприклад, цільова сторінка), встановіть $active_templates['header'] & $active_templates['footer'] на 0$active_templates['header'] = 0;$active_templates['footer'] = 0;}return $active_templates;}

Приклад: Змінити одиночний шаблон на основі користувацького поля

Є сценарій, коли потрібно мати кілька одиночних шаблонів для користувацького типу поста. Використовуючи цей фільтр, ви можете вирішити, який шаблон застосовувати в залежності від користувацького поля.

add_filter( 'esl/active_templates', 'set_active_templates_by_custom_field', 10, 3 );function set_active_templates_by_custom_field( $active_templates, $post_id, $content_type ) {// Виконуємо цю логіку тільки на фронтендіif ( ! esl_is_frontend() ) {return $active_templates;}// Повертаємо, якщо тип контенту не 'content'if ( $content_type !== 'content' ) {return $active_templates;}// Повертаємо: тип поточного посту не 'project'$post_type = get_post_type( $post_id );if ( $post_type !== 'project' ) {return $active_templates;}// Отримуємо значення кастомного поля з Metabox$value = absint( rwmb_meta( 'use_template_id' ) );// Значення не пусте: визначаємо $active_templates['content'] як значенняif ( $value > 0 ) {$active_templates['content'] = $value;// Якщо одиночний шаблон, буде використано налаштування сторінки, тож немає потреби встановлювати заголовок та колонтитули}return $active_templates;}