Получить слаг категории и отобразить его в query_post

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

Я только что прочитал “Как создать страницу опций для темы wordpress” на wp.tutsplus.com – у меня проблема с получением категорий.

У меня есть два вопроса.

– Часть A – Получить слаг категории и отобразить его

В этом уроке есть выпадающий список с такими опциями:

$options[] = array(
    "section" => "select_section",
    "id"      => WPTUTS_SHORTNAME . "_select_input",
    "title"   => __( 'Выберите (введите один)', 'wptuts_textdomain' ),
    "desc"    => __( 'Обычное поле формы выбора', 'wptuts_textdomain' ),
    "type"    => "select",
    "std"    => "3",
    "choices" => array( "1", "2", "3")

Теперь вместо выбора 1-2-3 я хочу вернуть слаги категорий, чтобы отобразить их пользователю – может кто-нибудь изменить этот код, чтобы он возвращал слаги для категорий, созданных на сайте?

– Часть B – Отобразить слаг категории в формате query_posts

Типичное возвращаемое значение для приведенного выше кода следующее:

<?php echo $wptuts_option['wptuts_select_input']; ?>

Я использую этот код для своего запроса постов:

<?php query_posts('showposts=1&category_name=news'); ?>

где “news” – это слаг категории, а не название категории. Теперь, может кто-нибудь изменить код, чтобы он получал слаг категории на основе выбранного варианта на странице опций темы?

Я застрял с этой проблемой и искал везде, но не могу найти решение, спасибо.

Я не уверен, как сделать то, что вы хотите. Но я использовал этот фреймворк, который очень похож на то, что у вас выше, но гораздо проще в использовании.

http://aquagraphite.com/2011/11/smof-documentation/

Настройка опций действительно проста, и она поддерживается через github. Там есть место, чтобы задавать такие вопросы. Кроме того, в фреймворке много примеров, которые вы можете копировать и вставлять, чтобы настроить свою админ-панель. Я просто закомментировал все примерные опции, чтобы иметь возможность ссылаться на них, когда хотел создать одну из них.

Что касается вашего вопроса. Я не знаю, как это сделать, но вы можете попробовать что-то вроде этого:

"choices" => get_categories(  ); 

Мы видим из примера, что опция принимает простой массив значений:

array( "1", "2", "3")

get_categories возвращает массив объектов, поэтому нам нужно немного изменить формат, чтобы это работало:

$categories = get_categories();
$slugs = array();
foreach( $categories as $category )
    $slugs[] = $category->slug;

Теперь у нас есть простой массив $slugs для передачи:

$options[] = array(
    "section" => "select_section",
    "id"      => WPTUTS_SHORTNAME . "_select_input",
    "title"   => __( 'Выберите (введите один)', 'wptuts_textdomain' ),
    "desc"    => __( 'Обычное поле формы выбора', 'wptuts_textdomain' ),
    "type"    => "select",
    "choices" => $slugs
);

Поместите этот код в ваш function.php

$terms = get_the_terms( $post->ID , 'category');
if($terms) {
  foreach( $terms as $term ) {
    $cat_obj = get_term($term->term_id, 'category');
    $cat_slug = $cat_obj->slug;
  }
}

а затем установите переменную $cat_slug в ваших “choices”,

и затем установите переменную $cat_slug в ваших “choices”,

$options[] = array(
 "section" => "select_section",
 "id" => WPTUTS_SHORTNAME . "_select_input",
 "title" => _( 'Выберите (введите один)', 'wptuts_textdomain' ),
 "desc" => _( 'Обычное поле формы выбора', 'wptuts_textdomain' ),
 "type" => "select",
 "choices" => $cat_slug
);

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

Конечно! Давайте разберемся с вашим вопросом по поводу получения слага категорий в WordPress и отображения его в настройках темы, а затем использованию его в query_posts.

Часть A – Получение слага категории и его отображение

Для того чтобы заменить варианты (1, 2, 3) на слаги категорий, первым делом, нужно получить список категорий. Это можно сделать с помощью функции get_categories(), которая возвращает массив объектов категорий. Затем, мы преобразуем этот массив в простой массив слагов.

Вот как вы можете это сделать:

// Получаем категории
$categories = get_categories();
$slugs = array();

// Извлекаем слаги категорий
foreach( $categories as $category ) {
    $slugs[$category->slug] = $category->name; // ключ - слаг, значение - имя категории
}

// Настройки для выбора слагов категорий
$options[] = array(
    "section" => "select_section",
    "id"      => WPTUTS_SHORTNAME . "_select_input",
    "title"   => __( 'Выберите категорию', 'wptuts_textdomain' ),
    "desc"    => __( 'Выбор категории по слагу', 'wptuts_textdomain' ),
    "type"    => "select",
    "choices" => $slugs
);

Здесь мы создали массив $slugs, где ключом будет слаг категории, а значением — имя категории. Это позволит вам отображать пользовательские понятные названия в выпадающем списке, но в дальнейшем получать выбранный слаг.

Часть B – Отображение слага категории в формате query_posts

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

// Получаем выбранный слаг из опций темы
$selected_slug = $wptuts_option['wptuts_select_input'];

// Используем слаг в query_posts
if ( !empty($selected_slug) ) {
    query_posts('showposts=1&category_name=' . esc_attr($selected_slug));
}

В этом коде мы проверяем, установлен ли слаг, и затем используем его в query_posts. Не забудьте использовать esc_attr() для безопасного использования переменной в запросе.

Заключение

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

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

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