Вопрос или проблема
Я создаю сайт на WordPress с использованием Elementor Pro и Advanced Custom Fields (ACF). У меня есть два пользовательских типа записей: Страны (для страниц стран) и Достопримечательности (для различных достопримечательностей в каждой стране). Я также создал пользовательскую таксономию под названием “Страны”, которая назначена как для типа записи Страны, так и для типа записи Достопримечательности.
Каждая запись Страны имеет связанную запись страны (например, “Молдова”, “Эстония”), и каждая запись Достопримечательности маркируется страной, к которой она принадлежит, с использованием той же таксономии. Я хочу отобразить список Достопримечательностей на каждой странице Страны, но только тех, которые соответствуют текущей стране.
Структура URL выглядит так: /countries/moldova/ (для страницы Молдовы), и я хочу отображать только Достопримечательности, относящиеся к Молдове, на странице Молдовы, а аналогично – достопримечательности Эстонии на странице Эстонии.
То, что я пробовал до сих пор, — это использование виджета записей Elementor Pro и фильтрация по терминам таксономии, но это требует от меня вручную устанавливать термин, что противоречит назначению динамического шаблона. Я также пробовал использовать FacetWP для фильтрации Достопримечательностей, но я все еще не могу понять, как сделать так, чтобы фильтр динамически извлекал страну из URL и сопоставлял ее с термином таксономии Достопримечательностей.
Как я могу динамически фильтровать Достопримечательности по стране на каждой странице Страны на основе URL, используя Elementor Pro (или FacetWP), без ручной установки термина для каждой страницы? Я хочу, чтобы шаблон работал для любой страницы страны и автоматически отображал соответствующие Достопримечательности. Есть ли способ достичь этого динамически, желательно без пользовательского кода, или мне нужен фрагмент кода?
Ответ или решение
Для решения вашей задачи по динамическому фильтруванию пользовательских типов записей "Достопримечательности" по таксономии "Страны" в Elementor Pro с использованием Advanced Custom Fields (ACF), вы можете использовать встроенные инструменты Elementor и небольшую модификацию с использованием кода.
Шаги для реализации:
-
Проверьте структуру URL: Убедитесь, что ваши страницы страны действительно расширяются как
/countries/moldova/
и что на каждой из этих страниц привязаны соответствующие термины таксономии. -
Создание динамического шаблона для "Стран":
- Откройте редактор тем Elementor и создайте новый шаблон для пользовательского типа записи "Страны".
- Добавьте нужные элементы для оформления страницы, такие как заголовки, описания и т.д.
-
Вывод "Достопримечательностей" с использованием Elementor:
- Внутри вашего шаблона стран используйте виджет "Posts" (Записи) или "Portfolio" (Портфолио) для вывода записей типа Sights.
- В настройках виджета перейдите в раздел "Query" (Запрос), где вы сможете настроить динамическое извлечение данных.
-
Динамическая фильтрация по таксономии:
- В настройках "Query" выберите тип контента "Sights".
- Добавьте условие по таксономии: выберите "Countries" и вместо указания конкретного термина используйте динамическую динамику – "Current Post" или "Custom Field", где укажите поле ACF, связанное с текущей страной.
-
Использование ACF для получения текущего термина:
Если у вас есть пользовательское поле ACF, связанное с терминами, можно использовать его.- Зайдите в ACF и создайте новое поле (например,
current_country
). Это поле будет содержать название текущей страны. - На каждой странице страны заполняйте это поле соответствующим значением (например, "Moldova" для /countries/moldova/).
- Зайдите в ACF и создайте новое поле (например,
-
Код для реализации динамического фильтра:
Если вы хотите, чтобы фильтрация происходила автоматически Без ввода термина вручную, вам может понадобиться немного кода. Используйте следующий код, поместив его в файлfunctions.php
вашей темы:function filter_sights_by_country( $query ) { if ( is_post_type_archive( 'sights' ) ) { // Получаем текущий объект записи $current_country = get_query_var( 'country' ); // Замените на вашу переменную URL, если используется // Настраиваем фильтр $query->set( 'tax_query', array( array( 'taxonomy' => 'countries', 'field' => 'slug', 'terms' => $current_country, ), ) ); } } add_action( 'pre_get_posts', 'filter_sights_by_country' );
-
Проверка на странице:
После выполнения всех шагов обновите страницу страны и проверьте, отображаются ли Достопримечательности, соответствующие текущему термину таксономии.
Дополнительные советы:
- Убедитесь, что вы правильно настроили таксономии для каждого типа поста и что они действительно связаны.
- В случае необходимости кода, создайте резервную копию вашего файла
functions.php
перед его редактированием. - Если используете FacetWP, изучите их документацию для интеграции с таксономиями и динамическими переменными. Однако, если вам нужен код обоими вышеописанными способами, вам не обязательно использовать FacetWP.
Эти шаги помогут вам динамически отображать "Достопримечательности" на страницах стран, основанные на URL, без необходимости вручную устанавливать термины для каждой страницы.