Как я могу предотвратить использование одного и того же пользовательского цикла в файле шаблона, если мне нужно изменить только один параметр meta_query?

Вопрос или проблема

Я отображаю набор предстоящих матчей для двух крикетных команд на одной странице. Матчи создаются из пользовательского типа записи (CPT), и соответствующая команда выбирается из пользовательского поля.

У меня всё работает так, как я хотел, но у меня настроены пользовательские циклы, и единственное отличие между двумя заключается в одной паре ключ => значение.

          $firstXIFixtures = new WP_Query(array(
            'posts_per_page' => -1,
            'post_type' => 'fixture',
            'orderby' => 'meta_value_num',
            'meta_key' => 'date',
            'order' => 'ASC',
            'meta_query' => array(
              array(
                'key' => 'team',
                'compare' => '==',
                'value' => '1st_XI',
                'type' => 'text'
              ),
            ),
          ));

Мне нужно только изменить 'value' => '1st_XI' на 'value' => '2nd_XI' в следующем цикле.

Если это поможет понять контекст, матчи находятся в макете с двумя колонками с отдельными заголовками сверху, чтобы указать, для каких команд предназначены следующие матчи.

введите описание изображения здесь

Как я могу сделать этот файл шаблона немного чище, так как он кажется довольно повторяющимся?

Спасибо,
Крейг

Ответ или решение

Чтобы избежать повторения кода в вашем шаблонном файле WordPress, когда единственное различие между двумя пользовательскими циклами — это одна пара ключ-значение в meta_query, вы можете воспользоваться функцией PHP. Это не только сделает ваш код более чистым и простым для чтения, но и облегчит дальнейшие изменения или обновления.

Вот пример того, как это можно реализовать:

function get_fixtures_by_team($team_value) {
    return new WP_Query(array(
        'posts_per_page' => -1,
        'post_type' => 'fixture',
        'orderby' => 'meta_value_num',
        'meta_key' => 'date',
        'order' => 'ASC',
        'meta_query' => array(
            array(
                'key' => 'team',
                'compare' => '==',
                'value' => $team_value,
                'type' => 'text'
            ),
        ),
    ));
}

$firstXIFixtures = get_fixtures_by_team('1st_XI');
$secondXIFixtures = get_fixtures_by_team('2nd_XI');

Объяснение решения:

  1. Создание функции: Мы создаем функцию get_fixtures_by_team, которая принимает один параметр — значение команды ($team_value). Это позволяет нам динамически использовать различные значения для выборки нужных постов, не дублируя код.

  2. Использование WP_Query: Внутри функции мы создаем объект WP_Query, который делает именно то, что и ваш первоначальный код; однако теперь он принимает различное значение для команды в зависимости от переданного аргумента.

  3. Вызов функции: Мы вызываем эту функцию дважды: один раз для первой команды (1st_XI) и один раз для второй команды (2nd_XI). Каждое обращение к функции возвращает результаты в переменные $firstXIFixtures и $secondXIFixtures.

Преимущества:

  • Читаемость: Данный подход значительно улучшает читаемость кода. Вместо того чтобы видеть два почти идентичных блока кода, теперь у вас есть простой вызов функции с параметрами.

  • Легкость обновления: Если вам когда-либо понадобиться изменить параметры запроса, вам нужно будет сделать это только в одном месте, что значительно снижет вероятность ошибок.

  • Переиспользуемость: Теперь вы можете легко переиспользовать функцию для других команд или в других частях вашего шаблона, просто передав нужное значение.

Заключение

Реализация функции для повторяющихся циклов — это хороший пример применения принципов DRY (Don’t Repeat Yourself) в программировании. Это поможет вам поддерживать код чистым и управляемым, что, в свою очередь, улучшит его качество и масштабируемость в будущем. Не забывайте также о проверках: убедитесь, что функция корректно обрабатывает случаи, когда нет результатов по запросу.

Если у вас остались вопросы или необходимость в дополнительных пояснениях, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...