Вопрос или проблема
Я только что прочитал “Как создать страницу опций для темы 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
. Надеюсь, это поможет вам! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.