Как получить один конкретный термин из атрибута короткого кода?

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

Я работаю над функцией, в которой просто хочу вывести кнопку, ссылающуюся на конкретный термин. Я использовал get_the_terms и заставил это работать успешно, но я пробовал get_term и не добился успеха. Я хочу, чтобы шорткод выглядел так [see_all_products category="bakery"] и выводил кнопку, ссылающуюся на него.

Вот моя функция на данный момент:

function product_category_button($atts) {

    extract(shortcode_atts(array(
        'category'  => '',
    ), $atts));

    // if( $category ) :

        // Vars
        $taxonomy = 'product_categories';
        $term = get_term( $category, $taxonomy ); //$post->ID
        $cat = $term->name;
        $parent = $term->parent;

        var_dump($cat);

        if ($parent == NULL) :

            // Vars
            $link = get_term_link( $term->slug, $taxonomy);

            $html_out="";
            $html_out .= '<a class="x-btn x-btn-primary x-btn-global hvr-bounce-to-bottom" href="' . $link . '">' . 'Посмотреть все продукты' . $cat . '</a>';
        endif;

        return $html_out;

    // endif;
}

add_shortcode( 'see_all_products', 'product_category_button' );

На данный момент $link выдает мне ошибку “Catchable fatal error: Object of class WP_Error could not be converted to string”, а $cat возвращает NULL в var_dump.

Не уверен, может ли это влиять на это, но здесь информация о $parent была предназначена только для получения родительского термина.

Похоже, вы пытаетесь получить термин по его слагу или имени. get_term() получает все данные термина по его id. В этом случае используйте get_term_by():

function product_category_button($atts) {

    extract(shortcode_atts(array(
        'category'  => '',
    ), $atts));

    // if( $category ) :

        // Vars
        $taxonomy = 'product_categories';
        // Используйте 'name' вместо 'slug', если хотите получить термин по его имени
        $term = get_term_by( 'slug' , $category, $taxonomy ); //$post->ID
        $cat = $term->name;
        $parent = $term->parent;

        var_dump($cat);

        if ($parent == NULL) :

            // Vars
            $link = get_term_link( $term->slug, $taxonomy);

            $html_out="";
            $html_out .= '<a class="x-btn x-btn-primary x-btn-global hvr-bounce-to-bottom" href="' . $link . '">' . 'Посмотреть все продукты' . $cat . '</a>';
        endif;

        return $html_out;

    // endif;
}

add_shortcode( 'see_all_products', 'product_category_button' );

Для дальнейшего чтения ознакомьтесь с codex.

использовать

get_category_link и get_category_by_slug

function product_category_button($atts) {

  extract(shortcode_atts(array(
      'category_slug'  => '',
  ), $atts));

  // if( $category_slug) :
          $get_category = get_category_by_slug($category_slug);

          $link = get_category_link($get_category);

          $html_out="";
          $html_out .= '<a class="x-btn x-btn-primary x-btn-global hvr-bounce-to-bottom" href="' . $link . '">' . 'Посмотреть все продукты' . $get_category->name. '</a>';


      return $html_out;

  // endif;
}

add_shortcode( 'see_all_products', 'product_category_button' );

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

Для того чтобы извлечь конкретный термин из атрибута шорткода, вам необходимо правильно использовать функции WordPress, которые отвечают за работу с терминами. Ваша цель заключается в создании шорткода, который будет выводить кнопку, ссылающуюся на определённую категорию продукции. Давайте подробно разберём решение данной задачи.

Шаг 1: Использование get_term_by()

Для получения термина по его слагу (slug) рекомендуется использовать функцию get_term_by(), так как функция get_term() требует ID, а не слага.

Ваш Шорткод

Вот доработанный пример вашей функции шорткода с комментариями:

function product_category_button($atts) {
    // Извлечение атрибутов из шорткода
    $atts = shortcode_atts(array(
        'category' => '',
    ), $atts);

    // Проверка, передан ли атрибут category
    if (!empty($atts['category'])) {
        // Задаём налогомию
        $taxonomy = 'product_categories';

        // Получаем термин по слагу
        $term = get_term_by('slug', $atts['category'], $taxonomy);

        // Проверяем, был ли найден термин
        if (is_wp_error($term) || !$term) {
            return '<p>Термин не найден.</p>'; // Обработка случая, если термин не найден
        }

        // Получаем данные термина
        $cat = $term->name;
        $parent = $term->parent;

        // Генерация ссылки на термин
        if ($parent == 0) { // Проверяем, является ли термин родительским
            $link = get_term_link($term, $taxonomy);

            // Проверка, успешен ли был запрос ссылки
            if (is_wp_error($link)) {
                return '<p>Ошибка при получении ссылки.</p>'; // Обработка ошибок ссылки
            }

            // Создание HTML блока для кнопки
            $html_out = '';
            $html_out .= '<a class="x-btn x-btn-primary x-btn-global hvr-bounce-to-bottom" href="' . esc_url($link) . '">' . esc_html('Смотреть все продукты в категории: ' . $cat ) . '</a>';
            return $html_out;
        } else {
            return '<p>Выбранный термин не является родительским.</p>';
        }
    }

    return '<p>Не указана категория.</p>'; // Обработка случая, если не указана категория
}

// Регистрация шорткода
add_shortcode('see_all_products', 'product_category_button');

Объяснение кода

  1. Атрибуты шорткода: Используем функцию shortcode_atts() для извлечения атрибутов из шорткода.

  2. Проверка наличия атрибутов: Убедитесь, что атрибут category указан и не пустой.

  3. Получение термина: Используем get_term_by('slug', $atts['category'], $taxonomy), чтобы получить термин по его слагу.

  4. Обработка ошибок: Проверяем, действительно ли термин был найден, с помощью is_wp_error().

  5. Получение и проверка ссылки: Получаем ссылку на термин с помощью get_term_link(), и также проверяем на наличие ошибок.

  6. Генерация кнопки: Создаём HTML-код для кнопки, используя функции esc_url() и esc_html() для защиты от XSS.

Заключение

Решение данной задачи требует внимательного отношения к работе с функциями WordPress, чтобы правильно обрабатывать термины и ошибки. Следуйте указанным шагам, чтобы создавать шорткоды, которые будут работать эффективно и без ошибок.

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

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