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, і якщо так, то дозволяємо елементу бути відображеним на основі стану авторизації.
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
за потреби.