Получите значение пользовательского поля из файла function.php

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

Мне нужно получить значение пользовательского поля в файле functions.php. У меня уже есть вот что. Я могу получить значение на шаблоне страницы, но в этом случае оно нужно в файле functions.php, потому что мне нужно это значение в функции facewp.

add_filter( 'facetwp_preload_url_vars', function( $url_vars ) {
    $offer_id = get_field('offer_type'); // нужно это значение с текущей страницы

    $term = get_term( $offer_id, 'offer' ); // offer = слаг таксономии
    $slug = $term->slug;
    
    if ( empty( $url_vars['offer_type'] ) ) {
        $url_vars['offer_type'] = [$slug];
    }
    return $url_vars;
} );

Как я могу этого добиться? Сейчас я получаю пустую переменную.

Найдено решение:

add_filter( 'facetwp_preload_url_vars', function( $url_vars ) {
        // получаем ID текущей страницы
        $url="http://" . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'REQUEST_URI' ];
        $current_post_id = url_to_postid( $url );

        // получаем offer_type (пользовательское поле) по ID текущей страницы
        $offer_id = get_field('offer_type', $current_post_id); // возвращает ID
        
        // получаем слаг таксономии по offer_id
        $term = get_term( $offer_id, $taxonomy );
        $slug = $term->slug;

        // предвыбираем фасет offer_type
        if ( empty( $url_vars['offer_type'] ) ) {
            if($slug) {
                $url_vars['offer_type'] = [$slug];
            }
        }
        return $url_vars;
} );

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

Чтобы получить значение пользовательского поля в файле functions.php вашего проекта WordPress, необходимо учитывать, что данный файл не выполняется в контексте конкретной страницы, а обрабатывается на глобальном уровне. Однако вы можете использовать различные подходы для извлечения данных конкретной страницы.

Решение задачи

На основе вашего кода и описания проблемы, вы уже нашли решение, но давайте подробно рассмотрим его.

add_filter('facetwp_preload_url_vars', function($url_vars) {
    // Получение ID текущей страницы
    $url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    $current_post_id = url_to_postid($url);

    // Получение значения пользовательского поля offer_type по ID текущей страницы
    $offer_id = get_field('offer_type', $current_post_id); // возвращает ID

    // Получение слага таксономии по offer_id
    $term = get_term($offer_id, 'offer'); // 'offer' — это слаг вашей таксономии
    $slug = $term->slug;

    // Предустановка фасета offer_type
    if (empty($url_vars['offer_type'])) {
        if ($slug) {
            $url_vars['offer_type'] = [$slug];
        }
    }
    return $url_vars;
});

Подробное объяснение:

  1. Получение ID текущей страницы:

    • Используется $_SERVER['REQUEST_URI'] для формирования полного URL текущей страницы. Затем с помощью функции url_to_postid() извлекается ID поста. Это необходимо, так как файл functions.php не знает, какая именно страница загружается.
  2. Получение значения пользовательского поля:

    • get_field('offer_type', $current_post_id) используется для получения значения поля offer_type для конкретной страницы, используя её ID. Это значение может быть как текстом, так и ID другой сущности (например, термина таксономии).
  3. Извлечение слага термина:

    • Функция get_term() позволяет получить объект термина, связанного с ID, полученным на предыдущем шаге. Это важно для реализации фильтрации или предустановки значений.
  4. Настройка переменных URL:

    • Проверка на пустоту элемента массива $url_vars['offer_type'] позволяет установить значение только тогда, когда оно не было установлено ранее. Это предотвращает перезапись и гарантирует, что значение будет добавлено только при необходимости.

Важно помнить:

  • Убедитесь, что идентификатор, который вы получаете из пользовательского поля, действительно соответствует ID термина, который вы хотите использовать. Это может потребовать дополнительной валидации в зависимости от вашей структуры данных.
  • Если вы используете кастомную таксономию, убедитесь, что указали её правильно в get_term().
  • Тестируйте изменения в безопасной среде, прежде чем переносить на продакшн-сайт.

Заключение

Работа с пользовательскими полями в WordPress требует понимания контекста, в котором вы работаете. Использование подхода, основанного на получении ID текущего поста, позволяет динамически получать значения и эффективно использовать их в фильтрах, таких как facetwp_preload_url_vars. Надеюсь, что это объяснение помогло прояснить процесс получения значений пользовательских полей для использования в файле functions.php.

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

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