Intereting Posts
Где добавить смещение? проверьте запрашивающий URL-адрес Предупреждение array_filter – wp-includes / post.php line 3148 Пользовательский шаблон для типа сообщения не работает Как запустить WordPress через 2 виртуальных машины для обеспечения высокой доступности Плагин: относительный URL-адрес изображений в другой папке, доступ к которой осуществляется в JS-файле Как связать встроенный AJAX с add_action? Как отображать аватар пользователя на странице своего профиля? Шаблон страницы с именованием имен боковых панелей? Присвоить конкретные объявления определенным категориям / сообщениям SELECT max (meta_value) FROM wp_postmeta WHERE meta_key = 'price' … перестает работать, когда значение превышает 999 Плагин электронной почты для электронной почты не будет настраиваться при попытке импортировать виджет Добавить фильтр в действие Рекомендации по категоризации для настраиваемого типа сообщений Тема «Двадцать семнадцать» – перемещение главного меню в начало экрана

Как автоматически помещать категории и их описания на страницу WP?

Я использую блог для отслеживания цитат, которые я могу использовать для диссертации. Каждая цитата является Почтой, авторы – это категории, которые являются родителями для подкатегорий, которые названы для названий книг или статей этого автора. В описании подкатегорий книги / статьи я размещаю информацию для публикации, например «Penguin: London, 2007».

Предположим, что определенную категорию авторов называют «Милл, Джон Стюарт» (для которых есть четыре цитаты), подкатегорию книг «О свободе» (для которой есть две цитаты) и описание «Bantam Classic: London, 1993 ». Теперь я хотел бы добавить страницу, в которой показаны все источники, которые я собрал, автоматически выводя код HTML следующим образом:

<p class="lit-author"><a href="../category/mill-john-stuart/">Mill, John Stuart</a> (4)</p> <p class="lit-work"><a href="../category/mill-john-stuart/on-liberty/"><i>On Liberty<i></a>. Bantam Classic: London, 1993. (2)</p> 

Это также можно было бы сделать с помощью <ul> s, я действительно заинтересован только в возможности форматирования вывода с помощью CSS и на странице. (Это в значительной степени просто содержимое виджета «Категории», но на странице, а также описание категории).

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

(WP 3.2.1, Графен 1.4.1)

Сначала вам нужно получить все категории, у которых нет родителей (категории верхнего уровня). Для этого мы будем использовать get_terms . Термины get возвращают пустой массив, объект WP_Error или массив объектов, представляющих термины. Поэтому мы должны убедиться, что наш вызов работает, прежде чем продолжить.

 <?php // very hackish get_terms call with the 0 as a string to return top level terms $cats = get_terms( 'category', array( 'parent' => '0' ) ); if( ! $cats || is_wp_error( $cats ) ) return; 

При этом мы можем начать с вывода контейнера div, а затем запустить цикл foreach для циклического перехода по всем категориям. Мы выведем термин и ссылку внутри абзаца в соответствии с вашим запросом выше.

 <?php $out = '<div id="ref-list">' . "\n"; foreach( $cats as $cat ) { $out .= sprintf( '<p class="lit-author"><a href="%s">%s</a></p>', esc_url( get_term_link( $cat ) ), sanitize_term_field( 'name', $cat->name, $cat->term_id, 'category', 'display' ) ); $out .= "\n"; // add some newlines to prettify our source 

Все еще внутри нашей петли foreach( $cats as $cat ) , мы можем зацикливаться на терминах детей. Если мы их найдем, мы пропустим каждый ребенок, получив его ссылку, имя и описание.

  <?php $children = get_term_children( $cat->term_id, 'category' ); if( $children && ! is_wp_error( $children ) ) { foreach( $children as $child ) { $child = get_term( $child, 'category' ); if( is_wp_error( $child ) ) continue; $out .= sprintf( '<p class="lit-work"><a href="%s"><em>%s</em></a>. %s</p>', esc_url( get_term_link( $child ) ), sanitize_term_field( 'name', $child->name, $child->term_id, 'category', 'display' ), esc_attr( $child->description ) // sanitize_term_field adds autop, no good for this situation ); $out .= "\n"; // prettifying newline } } } // end of the foreach( $cats as $cat ) loop $out .= "</div>\n"; return $out; 

Вы можете инкапсулировать весь этот беспорядок в функцию (примечание: здесь добавляются счетчики, забыл их выше).

 <?php function wpse25157_ref_list() { // very hackish get_terms call with the 0 as a string to return top level terms $cats = get_terms( 'category', array( 'parent' => '0' ) ); if( ! $cats || is_wp_error( $cats ) ) return; $out = '<div id="ref-list">' . "\n"; foreach( $cats as $cat ) { $out .= sprintf( '<p class="lit-author"><a href="%s">%s</a> (%s)</p>', esc_url( get_term_link( $cat ) ), sanitize_term_field( 'name', $cat->name, $cat->term_id, 'category', 'display' ), sanitize_term_field( 'count', $cat->count, $cat->term_id, 'category', 'display' ) ); $out .= "\n"; // add some newlines to prettify our source $children = get_term_children( $cat->term_id, 'category' ); if( $children && ! is_wp_error( $children ) ) { foreach( $children as $child ) { $child = get_term( $child, 'category' ); if( is_wp_error( $child ) ) continue; $out .= sprintf( '<p class="lit-work"><a href="%s"><em>%s</em></a>. %s (%s)</p>', esc_url( get_term_link( $child ) ), sanitize_term_field( 'name', $child->name, $child->term_id, 'category', 'display' ), esc_attr( $child->description ), sanitize_term_field( 'count', $child->count, $child->term_id, 'category', 'display' ) ); $out .= "\n"; // prettifying newline } } } // end of the foreach( $cats as $cat ) loop $out .= "</div>\n"; return $out; } 

И добавьте короткий код, чтобы отобразить его на любой странице / сообщении, который вам нравится.

 <?php add_action( 'init', 'wpse25157_init' ); function wpse25157_init() { add_shortcode( 'ref-list', 'wpse25157_ref_list' ); } 

В качестве плагина: https://gist.github.com/1196457

Скопируйте page.php в свой корень темы и назовите его page-list-of-categories.php . Наверху:

 <?php /** * Template Name: Page Category Display */ ?> 

Где-то после <?php the_title()?> следующее …

 <?php $args = array('title_li' => ''); ?> <ul id="myCategories"><?php wp_list_categories($args);?></ul> 

Затем сделайте страницу и выберите «Отображение категории страниц» в раскрывающемся списке под «Шаблон» в поле «Атрибуты страницы».

Классы css, которые у вас есть выше, не будут выводиться, но вы сможете их стилизовать, потому что кажется, что ваши категории с lit-work всегда являются дочерними категориями авторов. Таким образом, вы можете обратиться к авторам с ul#myCategories li и работает как ul#myCategories li li .

Существуют и другие опции – переданные в массиве $args – для wp_list_categories которые вы можете изучить.