Умови елементів дозволяють визначити одну або кілька умов для будь-якого елемента. Тільки якщо ці умови виконуються, елемент відображається на фронтальному кінці.
Умови перевіряються на сервері і призначені для фільтрації/не завантаження елемента на основі даних (пост, користувач, динамічні дані, дата та час тощо).
Невідображення елемента означає HTML елемента не існує в вихідному коді.
Це ідеально підходить для обмеження контенту лише для користувачів, які увійшли в систему, або користувачів з певною роллю (наприклад, сайти членства) для приховування інформації, що є чутливою до часу, відповідно до певного дня тижня/дати/часу, на основі динамічних даних тощо.
Якщо вам потрібна повна програмна потужність для визначення умов вашого елемента, використовуйте фільтр Esl esl/element/render.
ВАЖЛИВО: Умови елементів не застосовуються в двигуні!
Доступ до умов
При редагуванні елемента натисніть на значок “Умови” (перемикач) у заголовку панелі, щоб відкрити/закрити інтерфейс умов елемента. Ви побачите значок перемикача “Умови” у структурній панелі, якщо елемент має умови. Натисніть на значок, щоб перейшти безпосередньо в інтерфейс умов для цього елемента.
Як працюють умови елементів
Принаймні один набір умов має бути виконаний для відображення елемента. Це означає, що всі умови в наборі умов повинні бути оцінені як істинні.
Отже, існує відношення OR між наборами умов і відношення AND між умовами всередині набору.
Щоб додати свій перший набір умов, натисніть на значок “+” поруч із заголовком “Умови”:
Тепер у нас є один набір з однією умовою. Кожна умова складається з трьох наступних властивостей:
- Ключ (ID поста, роль користувача, дата, динамічні дані тощо)
- Операнд порівняння (==, !=, >, <, містить, до, після тощо)
- Значення (числове, текстове, прапорець, вибір опції(й) тощо)
Припустимо, ми хочемо показати елемент лише для користувачів, які увійшли в систему. Ми створимо таку умову:
Цей елемент відображається лише тоді, коли особа, яка переглядає цю сторінку, увійшла в систему.
Неавторизовані гості, боти, краулери тощо не зможуть побачити цей елемент (оскільки його немає в вихідному коді).
Індикатор умов
Зверніть увагу на підсвічений значок “Умови” на скріншоті вище. Це чудовий індикатор, який дозволяє швидко побачити, чи має елемент, який ви редагуєте, які-небудь умови (не відкриваючи інтерфейс умов).
Іконка “Умови” (перемикач) також видна поруч з елементом у панелі структури, що дозволяє швидко переглядати умови елементів на вашій сторінці. Клік на неї перенесе вас прямо в інтерфейс умов.
Перевірка кількох умов
Між набором умов існує АБО відношення. А умови в межах одного набору мають І відношення.
Давайте створимо другий набір умов (натиснувши на іконку “+” у верхньому правому куті знову), щоб проілюструвати це.
Умова в цьому новому наборі виконується (істинна), якщо заголовок поста – “Рахунок”.
Оскільки між наборами умов існує відношення АБО, елемент відображається, якщо (1) користувач увійшов в систему АБО (2) заголовок переглянутого поста/сторінки – “Рахунок”.
Поєднання умов І та АБО
Давайте розширимо умови для цього елемента, перевіривши, чи був увійшов користувач зареєстрований до 1 січня 2022 року.
Оскільки в межах набору існує відношення І, ми натиснемо кнопку “+” у нижньому правому куті нашої першої умови, щоб додати ще одну умову до цього першого набору ось так:
Ви також помітите вертикальну мітку “І” між умовами всередині набору.
І горизонтальну мітку “АБО” між наборами умов.
Сподіваємося, це допоможе краще візуалізувати логіку умов елементів.
Як порівняти динамічні дані з значенням
Умови елемента, за замовчуванням, порівнюють з етикеткою.
Деякі поля провайдера динамічних даних дозволяють вказати значення та етикетку (наприклад, ACF true false, список чекбоксів Metabox, радіо, вибір тощо).
Щоб порівняти з значенням замість цього, ви можете використовувати фільтр :value
ось так:
У наведеному вище прикладі умова виконується, коли в списку чекбоксів Metabox вибрано значення blue
. Без фільтра :value
умова порівнювала б з етикеткою опції чекбокса.
API умов елементів
Наступна інформація призначена для розробників, які бажають програмно розширити інтерфейс умов елементів за замовчуванням (@since 1.8.4
).
Належна умовна конструкція, яку ми створимо, повинна бути схожою на наступний приклад:
Крок 1: Додати групу умов через фільтр: esl/conditions/groups
add_filter( 'esl/conditions/groups', 'add_my_condition_group' );function add_my_condition_group( $groups ) {// Переконайтесь, що назва вашої групи є унікальною (краще префіксувати)$groups[] = ['name' => 'my_group','label' => esc_html__( 'Моя група', 'my-plugin' ),];return $groups;}
Крок 2: Додати параметри умов через фільтр: esl/conditions/options
У цьому прикладі ми створимо нову умову для порівняння типу запису поточної сторінки з значенням користувача. Порівняння – це спадне меню з варіантами “є” і “не є”. Поля значення – це поле text
.
add_filter( 'esl/conditions/options', 'add_my_custom_condition' );function add_my_custom_condition( $options ) {// Переконайтеся, що ключ є унікальним і що група існує$options[] = ['key' => 'my_post_type','label' => esc_html__( 'Тип запису (Новий)', 'my-plugin' ),'group' => 'my_group','compare' => ['type' => 'select','options' => ['==' => esc_html__( 'є', 'my-plugin' ),'!=' => esc_html__( 'не є', 'my-plugin' ),],'placeholder' => esc_html__( 'є', 'my-plugin' ),],'value' => ['type' => 'text',],];return $options;}
Крок 3: Виконайте вашу логіку, щоб повернути логічний результат через фільтр: esl/conditions/result
На основі вашої власної логіки, поверніть true
або false
для вашої умови. Esl сама враховує умови OR
та AND
.
У цьому прикладі ми перевіряємо, чи збігається тип запису з значенням користувача.
Якщо умова виконується, поверніть true
.
Ви можете отримати доступ до змінної $condition
, яка була встановлена всередині системи.
add_filter( 'esl/conditions/result', 'run_my_custom_condition', 10, 3 );function run_my_custom_condition( $result, $condition_key, $condition ) {// Якщо $condition_key не 'my_post_type', ми повертаємо $render як єif ( $condition_key !== 'my_post_type' ) {return $result;}// Тепер ви можете виконати свою логіку, використовуючи змінну $condition// $condition['compare'] - це оператор порівняння, може бути пустим// $condition['value'] - це значення користувача, може бути пустим// У моєму прикладі, якщо порівняння пусте, ми встановлюємо його значення за замовчуванням '=='$compare = isset( $condition['compare'] ) ? $condition['compare'] : '==';$user_value = isset( $condition['value'] ) ? $condition['value'] : '';$condition_met = false;// Отримати тип посту поточної сторінки$current_post_type = get_post_type();switch( $compare ) {case '==': // "є"$condition_met = $current_post_type === $user_value;break;case '!=': // "не є"$condition_met = $current_post_type !== $user_value;break;}return $condition_met;}
Якщо ви додали кілька варіантів в одну групу, ви можете націлити їх так:
add_filter( 'esl/conditions/result', 'run_my_custom_condition', 10, 3 );function run_my_custom_condition( $result, $condition_key, $condition ) {$condition_options = EslConditions::$options;$registered_condition = $condition_options[ $condition_key ];if ( $registered_condition['group'] !== 'my_group' ) {return $result;}// Тепер ви можете виконати свою логіку, використовуючи змінну $condition// $condition['compare'] - це оператор порівняння, може бути пустим// $condition['value'] - це значення користувача, може бути пустим$condition_met= false;switch( $condition_key ) {case 'my_condition_option_1':// Приклад$condition_met = execute_my_logic_1( $condition );break;case 'my_condition_option_2':// Приклад$condition_met = execute_my_logic_2( $condition );break;}return $condition_met;}