Фільтр: esl/element/render

Esl 1.5 представляє новий esl/element/render фільтр. Цей фільтр дозволяє вам реалізувати власну логіку умовного відображення програмно.

Це ідеально підходить для обмеження преміум-контенту для певних користувачів тощо.

Якщо умова в цьому фільтрі не виконується (тобто повертає false), то елемент не буде відображено на фронтенді.

add_filter( 'esl/element/render', function( $render, $element ) {// Логіка умовного відображення тут:// $render = true для відображення елемента// $render = false для пропуску відображення елементаreturn $render;}, 10, 2 );

Esl представив Умови елементів в 1.5.4. Використовуйте цей PHP фільтр для більш складного сценарію.

Приклад 1: Виведення конкретного елемента, якщо відвідувач авторизований

ID елемента з 6 символів – це остання частина стандартного HTML ID (після дефісу).

У наступному прикладі ми перевіряємо, чи має елемент конкретний ID, і якщо так, то дозволяємо елементу бути відображеним на основі стану авторизації.

add_filter( 'esl/element/render', function( $render, $element ) {// Відображення елемента ID "mlttpx", якщо користувач авторизованийif ( $element->id === 'mlttpx' ) {return is_user_logged_in();}return $render;}, 10, 2 );

Приклад 2: Не відображати елементи з конкретним кастомним CSS класом для користувачів з роллю підписника

Наступний приклад відобразить елемент, якщо він містить кастомний CSS клас hide-for-subscribers, якщо користувач авторизований і не є підписником.

Ви можете вибрати різні можливості користувачів відповідно до ваших потреб.

add_filter( 'esl/element/render', function( $render, $element ) {// Отримуємо CSS класи елемента$classes = ! empty( $element->attributes['_root']['class'] ) ? $element->attributes['_root']['class'] : false;// Перевіряємо, чи має елемент спеціальний клас "hide-for-subscribers"if ( $classes && in_array( 'hide-for-subscribers', $classes ) ) {return current_user_can( 'edit_posts' );}return $render;}, 10, 2 );

Приклад 3: Виведення елементів для конкретної категорії постів

Наступний приклад відобразить конкретний елемент на основі HTML ID на сторінці одного поста з конкретною категорією:

add_filter( 'esl/element/render', function( $render, $element ) {// Перевірити, чи це сторінка з одним постомif ( ! is_single() ) {return $render;}// Отримати користувацький HTML ID елемента$html_id = isset( $element->settings['_cssId'] ) ? $element->settings['_cssId'] : false;// Перевірити, чи є у елемента HTML ID "project-award"if ( $html_id && $html_id === 'project-award' ) {return has_category( 'projects' );}return $render;}, 10, 2 );

Приклад 4: Вивід елементів з класом “logged-in” для авторизованих користувачів та елементів з класом “logged-out” для не авторизованих відвідувачів

Наступний приклад відображає елементи, які мають клас logged-in тільки для авторизованих користувачів та елементи, які мають клас logged-out тільки для не авторизованих користувачів:

add_filter( 'esl/element/render', function( $render, $element ) {// Отримати CSS класи елемента$classes = ! empty( $element->attributes['_root']['class'] ) ? $element->attributes['_root']['class'] : false;// Перевірити, чи є у елемента спеціальний клас "logged-in"if ( $classes && in_array( 'logged-in', $classes ) ) {return is_user_logged_in();}// Перевірити, чи є у елемента спеціальний клас "logged-out"if ( $classes && in_array( 'logged-out', $classes ) ) {return ! is_user_logged_in();}return $render;}, 10, 2 );

Приклад 5: Вивід елемента з конкретним HTML ID на основі значення користувацького поля

Наступний приклад відображає елемент, у якого заданий HTML ID на основі значення конкретного користувацького поля поточного поста під час перегляду одиничної сторінки:

// Відобразити елемент з "project-award" HTML ID, якщо зазначена умова вірна.// Умова: Значення користувацького поля "dont_output_project_award" є false.add_filter( 'esl/element/render', function( $render, $element ) {// Перевірити, чи це одинична сторінкаif ( ! is_singular() ) {return $render;}// Отримати користувацький HTML ID елемента$html_id = isset( $element->settings['_cssId'] ) ? $element->settings['_cssId'] : false;// Перевірити, чи має елемент HTML ID "project-award"if ( $html_id && $html_id === 'project-award' ) {return ! get_post_meta( $element->post_id, 'dont_output_project_award', true );}return $render;}, 10, 2 );

Приклади вище насправді лише ілюструють кілька простих випадків використання. Будь-що, що ви можете перевірити з PHP, можна включити у вашу власну логіку умовного відображення, використовуючи цей новий esl/element/render фільтр.

Приклад 6: Вивід елемента в ACF Repeater, якщо підполе не пусте

Сценарій:

ACF Repeater: Питання та відповіді

Підполя: Питання, Відповідь, Текст кнопки та URL кнопки

Вимога: Коли тип запиту Query Loop встановлено на цей ACF Repeater, виводьте кнопку (дочірній елемент повторюваного елемента) лише в рядках, які мають значення для підполя тексту кнопки.

// Виведення одного або декількох екземплярів зазначеного елемента (всередині циклу запитів типу ACF Repeater), коли умова є істинною.// Умова: зазначене підполе всередині зазначеного поля ACF Repeater не є порожнім.add_filter( 'esl/element/render', function( $render, $element ) {if ( $element->id === 'huciku' && class_exists( 'ACF' ) ) {if ( have_rows( 'faqs' ) ) {// Цикл через рядки.while( have_rows( 'faqs' ) ) : the_row();return get_sub_field( 'button_text' );// Завершення циклу.endwhile;}}return $render;}, 10, 2 );

де huciku є ID елемента кнопки.

Примітка: Це буде застосовано як easysite-huciku клас у виході в цьому випадку, а не ID.

Також замініть строки faqs та button_text за потреби.