Для юзабилити, а так же хорошей оптимизации и удобной навигации блога является вывод списка Категорий блога. Рассмотрим простой тег (tag) шаблона (темплейта от англ. template) CMS WordPress get_categories(), используемый в мультилупах для вывода этого самого списка Категорий блога и другие теги. В дальнейшем, зная как выводить список постов блога (функция get_posts), это позволит нам создать практически любой сложности Карту блога, которой будет посвящен следующий топик.
Максимальный доступ к нужным функциям (например, подписка на определенную категорию, а не весь блог) и дополнительной информации позволит также повысить юзабилити (использование) вашего ресурса.
Итак, первым делом, нам нужно получить встроенные переменные из функции get_categories, выведем все аргументы, что эта функция содержит:
Теперь рассмотрим все варианты, которые могут иметь аргументы функции get_categories, а также их значения.
type = 'post' / 'link' — nип категории может возвратить результат "пост" или "ссылка". По умолчанию — 'post'.
child_of = '0' / '1' — показывает "детскую" (нижний уровень) категорию с идентификатором ID.
parent — показывает "родительскую" (верхний уровень) категорию с идентификатором ID [WP 2.8.4].
orderby = 'name' / 'ID' — сортировка по имени или ID (номеру идентификации). По умолчанию — 'ID'.
order = 'asc' / 'desc' — сортировка категорий от первой к последней или наоборот (ascending — возрастающий; descending — убывающий). По умолчанию — 'asc'.
hide_empty = '0' / '1' — тумблер, включающий / выключающий отображение категорий в которых еще нет постов. По умолчанию — '1'.
include_last_update_time = '0' / '1' — тумблер, включающий / выключающий отображение последнего обновления категории. По умолчанию — '0'.
hierarchical = '0' / '1' (false, tru) — тумблер, включающий / выключающий отображение пустых подкатегорий. По умолчанию — tru (1) — вкл.
exclude — убирает из общего списка wp_list_categories, перечислять список категорий через запятую.
include = 'list' / 'non' — показывать только перечисленные категории, противоположна exclude. По умолчанию — 'list'.
number — возвращает номер категории.
pad_counts — подсчитывает количество ссылок или постов ('post', 'link'), включая или не включая "детские" (вложенные, внутренние) категории.
После того, как мы определились какие же параметры и как нам нужно применить при выводе Категорий блога, присвоим все их значения переменной, например, $categories:
<?php $categories = get_categories($cat_args); ?>
С форматом вывода все ясно, но это лишь для одной категории, а чтобы вывести все категории блога, применим один из циклов PHP, например, foreach, заодно и присвоим при каждом проходе цикла аргументы новой переменной, назовем ее $cat:
Вывод категорий практически готов, но его можно значительно усовершенствовать, добавив дополнительные переменные в цикле с проверкой на их включение или выключение, например, так:
Таким образом мы можем разделить весь код на две части: настройки и вывод категорий, но в идеале нужно было бы код делить на три части:
Настройки вывода Категорий.
Обработка вывода категорий — присвоение переменным готовых результатов с оформлением в цикле. При этом нужно все переменные сложить в один массив (одно- двух- или многомерный, в зависимости от количества и сложности выводимых данных).
Вывод готовых данных из массива в html-шаблоне.
В рамках данной статьи ограничимся пока только двумя ступенями, а сложную обработку оставим для тех, кто разрабатывает сложные плагины, а для простого меню этого вполне достаточно.
В большинстве случаев для быстрого создания списка Категорий в сайдбаре на первых порах вполне сгодится встроенная функция CMS WordPress wp_list_categories():
show_option_all — показывает ссылки на все Категории, если установлен стиль "список" (list). По умолчанию не показывает ссылки на все Категории.
orderby = "ID, name, slug, count, term_group" — сортирует Категории по: уникальному номеру идентификации (ID), алфавиту (name), количеству постов в Категории (count) или по группам. По умолчанию orderby = "name".
order = "ASC, DESC" — сортирует Категории по возрастанию (ascending) или убыванию (descending). По умолчанию order = "ASC".
show_last_updated = "1 (True), 0 (False)" — показывает последнее обновление поста. По умолчанию show_last_updated = "0 (False)".
style = "list, none" — стиль показа Категорий: список, без списка. Если установлена метка "без списка", то категории выводятся на новой строке каждая, с html-тегом "<br />". По умолчанию style ="list".
show_count = "1 (True), 0 (False)" — тумблер, включающий / выключающий показ количества постов в Категориях. По умолчанию show_count = "0 (False)".
hide_empty = "1 (True), 0 (False)" — тумблер, включающий / выключающий показ "пустых" Категорий, в которых нет еще постов. По умолчанию hide_empty = "1 (True)".
use_desc_for_title = "1 (True), 0 (False)" — устанавливает для категорий описание (Description) в html-тег "title" (<a title="Description: ..." href="...). Например, при наводе мыши на ссылку Категории в подсказке будет надпись "Смотреть все посты в Категории 'название категории'."). По умолчанию use_desc_for_title = "1 (True)".
child_of — показывает внутренние Категории ("детские"). Не имеет метки по умолчанию.
feed — показывает ссылку каждой Категории на фид типа RSS2.
feed_type— устанавливает тип фида (Атом, RSS и др.).
feed_image — устанавливает feedicon (картинку для фида). Этот параметр (feed_image) перекрывает парамет feed.
exclude — удаляет одну или несколько Категорий из списка Категорий. Нужно перечислить UID'ы (unique ID — уникальный идентификатор) через запятую. Метка параметра child_of устанавливается автоматически в значение "false" при применении.
exclude_tree — убирает из списка Категорий "дерево-Категорий" (WP 2.7.1).
include — выводит список Категорий только из установленных UID'ов Категорий, перечисленных через запятую по ASC-порядку.
hierarchical = "1 (True), 0 (False)" — показывает подкатегории вложенным списком (отдельный иерархический список, столбик) или просто перечисляет в одну строчку через запятую. По умолчанию hierarchical = "1 (True)".
title_li — выводит заголовок списка Категорий, по желанию заголовок можно обрамить дополнительными html-тегами или не выводить заголовок вовсе. По умолчанию "_Categories" ("Категории").
number — задает количество выводимых Категорий. По умолчанию выводятся все Категории.
показывает порядковый номер выводимой Категории (1, 2, 3, ...).
echo = "1 (True), 0 (False)" — указывает: нужно показать результат (вывести на монитор) или сохранить его в переменной для следующего вывода (WP 2.3). По умолчанию echo = "1 (True)".
depth = "0, -1, 1, n" — контролирует глубину вывода списка Категорий, т.е. указывает сколько уровней в иерархии Категорий будет показано в общем списке Категорий. Значения метки: 0 — все категории и подкатегории ("дети"); -1 — все Категории плавающие (flat), т.е. без отступов вправо (indent), перекрывает hierarchical; 1 — показывать только верхние Категории без вложенных (только "родители"); n — число, определяющее уровень глубины (уровень вложенности Категорий в выводимом списке). По умолчанию depth = "0".
current_category — устанавливает стиль "current-cat", позволяющий выделить (подсветить) текущую категорию, в которой в данный момент находится читатель (WP 2.6). Перекрывает "current" в условии if (is_current) {...}.
Попробуем вытащить некоторые значения Категорий из БД.
<?php
//Количество категорий (рубрик).
$numcats = $wpdb->get_var("
SELECT COUNT(*)
FROM $wpdb->term_taxonomy
WHERE parent=0 //Верхний уровень
AND taxonomy='category'
");
echo $numcats;
?>
А можно так:
<?php
$cats = 0; //Начало отсчета кол-ва Категорий.
$categories = get_categories($args);
foreach ($categories as $cat) {
if ($posts) $cats++; //Тоже, что 'hide_empty'='true'
}
//Если Категорий больше 0, то выводим их кол-во.
if ($cats != 0) echo $cats;
?>
Если нам нужно только верхний уровень категорий (только "родительские" Категории), то прописываем строчку "WHERE parent=0" в запросе к БД, это даст тот же результат, что и "depth=1".
Попробуем узнать ID Категории по ее данным:
<?php
//ID Категории по имени.
$id1 = get_category_by_slug('WordPress')->term_id;
//ID Категории текущей через встроенную функцию WP.
$id0 = get_category();
$id2 = $id0->term_id; //$id2 = $id0->cat_ID;
//ID Категории текущей напрямую через функцию PHP.
$id3 = (int) $_GET['cat_ID'];
echo $id1.', '.$id2.', '.$id3;
?>
Многие элементы, ID или другие метки которых нужно, недавно обобщили и теперь, в зависимости от группы, используется однотипная запись "term_id" вместо уточнения каждого элемента, например, post_ID, page_ID, category_ID, comment_ID, autor_ID, user_ID, tag_ID и т.д., что значительно упрощает создание запросов в поиске нужных меток / аргументов функций. Пока еще не все элементы перекрытия совмещены, но, надеюсь, скоро будут. Для большей "эластичности" в иерархии (taxonomy) созданы новые таблицы в БД: wp_terms, wp_term_relationships, wp_term_taxonomy.
Попробуем найти всех детей и родителей для Категории с ID:
<?php
//Найдем всех "родителей" (внешние Категории).
$descendants = get_categories(array('child_of'=>ID));
//Найдем всех "детей" (вложенные Категории).
$children = get_categories(array('parent'=>ID));
//Распечатаем массивы для одной Категории.
echo $descendants.'<br /><br />'.$children;
//Если нужно для всех Категорий, то задаем цикл.
foreach ($children as $child) {echo '<li>'.$child->cat_name.'</li>';}
?>
Некоторые блогеры любят ставить иконки для каждой категории индивидуально. Это можно сделать в трех вариантах: 1 — вручную прописать в коде (или в стилях) путь к каждой иконке; 2 — можно проставить иконки автоматом для всех категорий, но под каждую Категорию нужно обязательно разместить иконку, иначе напечатается пустая рамка и будет смотреться некрасиво; 3 — можно проставить автоматом иконки для всех категорий, но с проверкой существования каждой иконки и, если иконки под Категорию с ID, не существует, то поставить дефолтную иконку, общую для всех категорий.
Именно так реализованны картинки 125х125 px на этом блоге — Остров МЫСЛЕЙ. В дополнительном поле нужно ввести ключ "thumbnail" и путь к картинке, чтоб она отразилась для конкретного поста, иначе картинка будет назначена по умолчанию для всех постов конкретной Категории, если нет картинки в папке для конкретной Категории, то буден выведена дефолтная картинка, установленная для всех категорий. Данный код можно вставить в файлы шаблона Темы CMS WordPress index.php (шаблон главной страницы) и single.php (шаблон полной статьи). Если требуется разместить что-либо (какую-то информацию) или просто изменить стиль одной или нескольких отдельных Категории, то можно сделать это проще, например, таким образом:
И напоследок. Если нужно реализовать, например, под шапкой блога сайдбар, показывающий место нахождение читателя: Остров МЫСЛЕЙ >> Категория >> Пост, то это можно сделать, например, вот так:
В CMS WordPress имеются также встроенные функции для быстрой ручной подгонки is_category и in_category. Функция is_category позволяет определить, что открыто в данный момент нужная страница Категории шаблона Архива (зайти в Архив можно через Календарь). Функция in_category позволяет определить, что открыто в данный момент нужная Категория.
<?php
//Выполнить условие, если открыта любая Категория Архива.
if (is_category()) {}
//... если открыта Категория с ID='id'.
if (is_category('id')) {}
//... если открыта Категория с именем Name='name' или Slug='slug'.
if (is_category('name')) {}
//... если открыта Категория с именем Name='name', Slug(NiceName)='slug' или ID='id'.
if ( is_category(array(id,'name','slug')) ) {}
?>
<?php
//Выполнить условие, если открыта любая Категория блога.
if (in_category()) {}
//... если открыта Категория с ID='id'.
if (in_category('id')) {}
//... если открыта Категория с именем Name='name' или Slug='slug'.
if (in_category('name')) {}
//... если открыта Категория с именем Name='name', Slug(NiceName)='slug' или ID='id'.
if ( in_category(array(id,'name','slug')) ) {}
?>
Последний примерчик на дорожку... Распечатаем 5 подкатегорий в каждой родительской категории, если открыта любая родительская Категория блога.
<?php
#Проверим, находимся ли мы внутри какой-либо категории.
if (in_category()) {
#Узнаем ID текущей категории.
$id_current = (isset($_GET['cat_ID']) && trim($_GET['cat_ID'])!='')?(int)$_GET['cat_ID']:false;
#Узнаем, находимся ли мы в категории-родителе.
$descendants = get_categories(array('child_of'=>$id_current));
if (isset($descendants) && is_array($descendants) && $descendants!=null) {
#Если мы в родительской категории, то собираем ее дитей.
$children = get_categories(array('hide_empty'=>0,'parent'=>$id));
$num = 5; #Количество выводимых подкатегорий (дитей).
$c = count($children); #Всего дитей у текущего родителя.
$blog = get_bloginfo('wpurl'); #Адрес нашего блога.
$j = ($c>$num)?$num:$c; unset($num,$c);
for ($i=0;$i<$j;$i++) {
$name = $children[$i]->name; #Название подкатегории.
$descr = $children[$i]->description; #Подробное описание подкатегории.
$url = $children[$i]->slug; #Путь подкатегории на англ.
$parent = $children[$i]->parent; #Кто родитель.
$posts = $children[$i]->count; #Количество постов в подкатегории.
$href = "$blog/$parent/$url";
$link = '<a href="'.$href.'" title="'.$descr.'">'.$name.'</a>';
$cats[$name] = "<li>$link ($posts)</li>";
}
#Проверяем, получили ли мы массив подкатегорий,
#если да и он не пустой, то печатаем его.
if (isset($cats) && is_array($cats) && $cats!=null) {
ksort($cats); $out = '<ul>'.explode("\n\t",$cats).'</ul>';
echo $out;
}
}
} #if (in_category())...
?>
Если нужно любую из записей видеть только администратору, а от посетителей нужно скрыть, то можно любую из записей заключить в такое условие:
<?php if (current_user_can('level_10')) { ?>
Любая запись, видимая только администратору.
<?php } ?>
Продвинутым пользователям CMS WordPress:
Остальные теги шаблонов можно узнать здесь: Conditional_Tags.
Посмотреть дополнительную информацию здесь: Function_Reference —> get_category_link, get_category_parents, is_category, in_category.
На странице перечня всех встроенных функций CMS WordPress (Function_Reference) можно найти любые поддерживаемые аргументы каждой встроенной функции, но поскольку Кодекс обновляется реже, чем выходят новые версии CMS WordPress, то последние версии API следует искать в файлах самого CMS WordPress, например, для категорий это файл /wp-includes/category.php.
Проблемы, возникающие у новичков.
Несколько раз спрашивали, почему распечатать массив можно (функция PHP — print_r()), а получить ячейку — нет, выводится ошибка:
"Cannot use object of type stdClass as array"
Дело в том, что в PHP могут быть написаны как "пользовательские функции", так и "классы". В классах создаются объекты, они распечатываются функцией print_r() на экран, но присвоить этот объект переменной нельзя простым присвоением:
$name = $children[$i]['name'];
Нужно сослаться на ячейку объекта, а не массива:
$name = $children[$i]->name;
Чтобы преобразовать одно в другое в PHP, можно записать так:
Ну вот, вроде, все разобрали, теперь мы умеем выводить Посты и Категории. В следующий раз попробуем создать Карту блога с нужными нам свойствами, прежде всего, нужными ссылками, расположенными в удобном порядке, а в этом топике, если есть какие-то вопросы или пожелания, пишите, спрашивайте, добавлю примеров.
Нашли ошибки, знаете больше? - Пишите, исправим и дополним.
Просмотров: 13,694 Комментариев: Комментарии (37) Опубликованно: Понедельник, Ноябрь 9th, 2009 в 15:34 Обновлено:
26 Август 2010 в 11:25.
Директории:Wordpress Автор:admin, все авторы.
Понравилась статья? - Не пропустите следующую, подпишитесь на
RSS-канал[?],
e-mail
или читайте блог Остров МЫСЛЕЙ через
Яндекс.Ленту или
Google.Reader.
Да, я Карту делал описанным способом, через две встроенные функции – get_posts и get_categories, хотя можно сделать прямыми запросами в БД, можно через другие функции или создать шаблон своих собственных запросов в своей собственной функции – вариантов много, как можно вывести данные, а последняя версия ВП (2.8.5) имеет много зеркальных Таблиц Данных – на любой цвет и вкус.
Карта у меня одним файлом, если есть интерес, я перешлю файлик и объясню, как его настроить, также постараюсь подогнать более-менее под дизайн. Файл достаточно просто заинклюдить, чтоб Карта работала, потом просто Стили подправить (CSS), Если CSS хотя бы чуток знаете (имеете представление что это и где), то проблем возникнуть никаких не должно.
Если спрос будет на Карту, может, сделаю в виде плагина, посмотрим, но пока она просто в тему вставляется.
Я пока, Игорь, на такое не решаюсь. Ворд у меня 2.7.1., я еще не разу не обновлялась, попробовала, блог стал невидим, я все вернула тут же на место и отложила это до лучших времен. С картой сайта тоже возилась долго, даже описала свои злоключения, поэтому пока решила не эксперементировать.
А как сделать дерево категорий, чтобы выворачивались подкатегории, это с помощью какого плагина?
Поставила Wp-dTree, но одну из категорий он не показывает.
Вот у меня возник вопрос. Есть функция use_desc_for_title = «1″ Она показывает титле к рубрике. А как полностью убрать титле, чтобы оно не отображалось, чтобы его не было.
Речь об этом. Если я ставлю параметр use_desc_for_title=0, то показывается дефолтный титл в ссылке рубрике. Если 1, то из описания рубрики. А мне же нужно его полностью убрать, чтобы титл или был пустой или вовсе его не было. По ссылке выше решения не нашел.
Если полностью удалить Титул у Категорий (Рубрик) нужно, то есть 2 варианта:
1. Геморойный. Во время генерации веб-страницы в браузере через скрипты, например, используя библиотеку скриптов jquery можно делать подмену любого куска кода после тега «body».
2. Простой. Зайти в админку, выбрать слева в блоке «Записи» –> Категории (Рубрики), затем навести мышку на Категорию, появятся всплывающие ссылки «Изменить | Свойства | Удалить», кликнуть «изменить» (Изменить рубрику), а там уже просто удалить Титул, затем «Сохранить». Выполнить для всех категорий.
Yeva, насколько помню, подобные примеры видел в Кодексе. Некоторые вещи писал у себя не проверяя (не делал у себя подкатегории и прочее), поэтому для конкретного случая сказать не могу. Если вопрос стоит остро, можно покопаться в кодах, посмотреть… Когда писал топик, стоял ВП 2.7.1-2.7.5 (?), сейчас 2.8.5, но уже вышел 2.9.1. Просто, возможно, в какой-то версии работает, в какой-то нет… Нужно разбираться
Игорь, я вижу, вы прекрасно разбираетесь как в php, так и в WP. Не могли бы вы посетить тему на форуме для решения вопроса, указанного в ней:
Сам вопрос:
как сделать на странице категории вывод всех постов из каждой ее подкатегории:
Страница с категорией 1:
–подкатегория 1.1
—-post 1 подкатегории 1.1, в который входит title и the_content подкатегории 1.1
—-post 2 подкатегории 1.1, в который входит title и the_content подкатегории 1.1
–подкатегория 1.2
—-post 1 подкатегории 1.2, в который входит title и the_content подкатегории 1.2
….. и т.д.
Думаю, данное решение было бы вам интересным, и буду очень признателен за вашу помощь!
Если в течении суток никто не отзовется на форуме, завтра вечером постараюсь выложить готовый вариант, сейчас не могу – занимаюсь «переездом» на другой хостинг.
Nikolas_Sharp, прочтал сейчас несколько рз ваш вопрос по выводу подкатегорий и постов. Поставил на Денвер WP2.9.2, он в точности так и выводит подкатегории и посты. Не моу понять, в чем загвоздка у вас? Обновите WP 2.7 до версии 2.9, проверьте еще разок. Может, нужно не подготегории выводить, а под-подкатегории?
Я в танке Если сделаете простенькую схемку, постараюсь помочь, а то, что указано выше, идет по умолчанию.
Здравствуйте, Denis. Не понял, что вам нужно. Опишите задачу, что вы хотите сделать с категориями, подумаю на досуге как реализовать. Стандартные функции подзабыл, их не использую, пишу свои, если есть необходимость; когда топик писал, был WP2.7, могло что-то измениться в стандартных функциях Вордпресса.
Что касается сортировки в PHP, то SQL-запросом сортировать данные можно как угодно, например, для категорий:
- по количеству комментариев;
- по количеству публикаций;
- по именам;
За эту сортировку отвечает запись «ORDER BY (условие)».
Как в прямом порядке (ASC), так и в обратном (DESC), за это отвечает запись в запросе «ASC» и «DESC» сразу после «ORDER BY (условие)».
Если требуется под заказ написать какую-то сложную функцию (абсолютно любую), можете стучать в любое время в контакты: zgr@bk.ru (это ася, агент, почта).
Здравствуйте, Denis. Не понял, в чем возникла у вас проблема, посмотрел новые функции Вордпресса 3.0, все должно работать у вас, если нет, то обновите версию до актуальной. Категории итак сортируются по имени – это условие по умолчанию (orderby=name), но сортировать можно и по группам (orderby=group) – я это так понял; эх, сто лет уже не копался в коде Вордпресса.
Сейчас нет времени выяснять как это делается – 2 сайта ремонтирую, включая этот, а вы весьма не многословны и вытягивать из вас каждое слово нет возможности. На будущее: пишите проблемы конкретней, описывайте детали (версию блога, страницу, на которой проблемы, пример, который использовали и не получился – какие функции и т.д.), я очень занят, чтоб прыгать вокруг костра с бубном, гадая в чем проблема у вас. Сейчас нет свободного домена потестить функции, поэтому просто написал «на коленке» еще один примерчик вывода подкатегорий в главных категориях с сортировкой… Его можно дорабатывать до одури, увеличивая код до 5-7 раз, но думаю, уже есть от чего отталкиваться вам… надеюсь, хоть чем-то помог; если что-то не понятно, спрашивайте, постараюсь расписать функции еще подробней.
П.С. Сортировка массивов в php (все функции …sort()) описаны в разделе «Функции работы с массивами»: http://php.net/manual/en/function.sort.php
День добрый! Если бы вы вывели в категории список подкатегорий с помощью моего кода wp_list_categories(‘orderby=name&hierarchical=0&title_li=&child_of=’.$cat);
который я написал во втором комменте, вам бы сразу стало ясно о чем я говорю. Повторюсь, из данного кода видно, что сортировка идет по name и иерархия отключена. НО $cat отменяет значение orderby=name. Вот я и пытаюсь найти решение этой отмены сортировки по name. Использую wp 3.0.1 (так же смотрел и на 2.9.2). Спасибо за ваше внимание к моей проблеме
Странно, что не работает стандартная функция, хотя в хелпах пишут, что должна. Первое, что приходит на ум – пересобрать свой массив из категорий, отсортировать как надо и распечатать. Проверить, к сожалению, не на чем, но по идее должно работать, вот примерчик:
#Собираем нужные категории в переменную.
$cats = wp_list_categories("orderby=name&hierarchical=0&title_li=&hide_empty=0&echo=0&child_of=$id");
if (isset($cats) && trim($cats)!='') {
#Устанавливаем разделитель для нового массива категорий.
$cats = str_replace(' </li> ','</li>|',$cats);
$arr = explode('|',$cats); unset($cats); #Получаем массив категорий.
foreach ($arr as $c) {
preg_match('|<(.*?)</a>|i',$c,$r);
if (isset($r[1]) && $r[1]!='') {$cats[$r[1]] = $c; unset($r);}
}
if (isset($cats) && is_array($cats) && $cats!=null) {
ksort($cats); #Сортируем массив категорий как нам нужно.
foreach ($cats as $c) echo $c; #Печатаем результат.
unset($c,$cats,$arr); #Удаляем временный мусор.
}
}
М… да, если подкатегорий нет, нужно проверку на «нул» поставить, забыл; обновил предыдущий комментарий. Если выдаст ошибку какую-либо, то нужно уже каждую переменную на сайте у вас распечатывать и смотреть, где они теряются, а так код должен работать… Вы тоже подключайтесь, не копируйте вслепую
ДОбрый день.
У меня появилось желание выводить в имена всех категорий поста – если мы находимся на главной, или имена всех категорий всех рубрик к которым относится тот пост на котором мы находимся.
Так же хотел добавить вывод и меток по такой же схеме, но ломая голову и перебирая все параметры вывода столкнулся с проблемой вывода лишь названий что меток что категорий.
Или проблемы нет и я лишь что то упустил? Уточню: WP постоянно выдаёт ссылки, оформленные или нет, а мне нужны лишь названия.
Как вам идея? И прошу помощи.
Говорят что Джумла это сама делает автоматически. А у WP есть такие стандартные решения кроме вывода bloginfo(‘description’) ? Потому что он мне не подходит.
Спасибо.
Привет, Андрей, не совсем понял что вы хотите – несвязно как-то получилось первое предложение. Также не ясно, в чем у вас проблема возникла при выводе имени категории? Если вам нужны просто названия (без ссылок) категорий, то делается так:
$args = '';
$categories = get_categories($args);
echo 'Категория: '.$categories[0]->name.' '; //Вывод одной категории.
print_r($categories); //Вывод объекта всех категорий.
Категории имеют очень большое множество перекрестных параметров – можно вытащить абсолютно все: кол-во постов, комментариев, дескриптцию, дату обновления и т.д. – все, что угодно и все это оформить под свой диз.
Я дико извиняюсь что не проверил свой камент, не поставил нужные тэги и код не прошёл.
Изначально огромное спасибо за подсказку.
А дело в том что, я захотел выводить в HTML теги meta name=»description» и meta name=»keywords» именна всех категорий и меток.
То есть, если мы находимсяна главной – выводятся все категории, если мы находимся в категории то выводятся подкатегории, если открыт пост – то все категории которые относятся к этому посту.
Да кстати. Пытаюсь вникнуть но видимо мне нужно еще время. print_r($categories); //Вывод объекта всех категорий. – понял вывел…
а какой цикл нужно сделать или условие чтобы вывести все названия категорий всего блога?
Перечитываю вашу статью и все параметры но не могу понять – $categories[0] – вот этот ноль – это порядковая нумерация (не ID) категорий?
В моёй тестовой базе – вышел объект всех категорий где есть три категории: [0],[1],[2].
Я спрашивал: А есть ли у WP стандартные методы вывода названий меток или категорий в в HTML теги meta name=»description» и meta name=»keywords» ?
Или стандартно WP может выводить только инфо о блоге?
Да и не могли бы подсказать? А как вытащить имена меток? Хоть этот вопрос и не к этой статье.
Еще раз спасибо. Особенно за то, что за последние 3-ое суток вы откликнулись вторым а помогли первым и единственным.
Андрей, не ленитесь, почитайте еще раз внимательно топик и саму документацию (http://codex.wordpress.org/Template_Tags/), то, что вам нужно расписано очень подробно с примерами. Что вы подразумеваете под фразой «стандартные методы вывода» – не знаю, я пользуюсь PHP – он стандартен у всех в минимальной установке на сервере, но как правило, почти все библиотеки тоже по умолчанию на сервер устанавливают. Циклы вывода информации в PHP обычно такие: while(){}, for(){}, foreach(){}, если они не подходят для использования, можно выкрутиться как-то иначе – зависит от ситуации.
Чтоб не искать, вот примеры готовые.
Проверить, на главной мы странице сейчас или нет, можно разными способами в PHP – зависит от настроек Вордпресса и сервера:
Добрый день! С Праздником вас! Спасибо за статью, надеюсь вы сможете мне помочь.
WordPress 3.0.4, стандартная тема Twenty Ten 1.1 от the WordPress team
Есть 10 страниц в виде верхнего меню. Хочу чтобы при открытии каждой из страницы открывался только определенный сайдбар только с одной с страницей с подстраницами.
Для этого сделал 10 шаблонов страниц для каждой.
В каждом шаблоне вывожу только одну страницу <?php wp_list_pages('include=88&title_li=' . __('') . '' ); ?>
Все отлично, но подстраницы (субстраницы) не отображаются.
По вашей статье сделал так: <?php wp_list_pages('include=88&child_of=88&title_li=' . __('') . '' ); ?>
Но это не помогает, что я не так делаю. Заранее спасибо за помощь
Код съело, ну, главное, что получилось… Форматирование придётся вам в CSS подправить.
М… проверю форму, спасибо. Каждый раз, как плагин какой-то обновляю, постоянно блог рвёт, замучался уже постоянно всё переписывать; как руки дойдут, попробую выкинуть все плагины и нормально их в сам блог вписать, чтоб везде всё гладко было.
А как по простому вывести в сайдбаре спискок постов в категорях? Типа:
Категория 1
Название поста 1
Название поста 2
Название поста 3
Категория 2
Название поста 4
Название поста 5
и т.д.
Не надо никаких заморочек с раскрыванием и т.д., просто дерево постов и чтоб на пост была ссылка.
Уже несколько часов ищу, уже глаза болят, лучшее что нашел это wp-dtree, но он слишком навороченный и там лишние ссылки на категориях для сворачивания/разворачивания и трудно оформить с помощью css.
Рекламный блок РБ3 (360x60 или 125х125 пх). Здесь может быть Ваша реклама (текст, ссылки, баннеры) -
сквозная прямая ссылка на всех страницах всего за 40 $/мес.
Подробности по размещению рекламы в блоге Остров МЫСЛЕЙ:
463768885,
zgr@bk.ru...
Блогер-сеошник, веду сайты:
Остров ПОЭЗЫ,
Остров УСЛУГ,
Остров ЛИТЕРАТУРЫ.
Это техническая страница, более подробно обо мне смотрите здесь.Также приглашаю заглянуть в раздел
О блоге и посетить
личный блог.
Ноябрь 10th, 2009 Комментариев: 13
Цитировать
Игорь, карта этого блога сделана вышеописанным способом? Такой я еще не видела. Но, мне кажется, что это сложно.
Ноябрь 10th, 2009 Комментариев: 77
Цитировать
Да, я Карту делал описанным способом, через две встроенные функции – get_posts и get_categories, хотя можно сделать прямыми запросами в БД, можно через другие функции или создать шаблон своих собственных запросов в своей собственной функции – вариантов много, как можно вывести данные, а последняя версия ВП (2.8.5) имеет много зеркальных Таблиц Данных – на любой цвет и вкус.
Карта у меня одним файлом, если есть интерес, я перешлю файлик и объясню, как его настроить, также постараюсь подогнать более-менее под дизайн. Файл достаточно просто заинклюдить, чтоб Карта работала, потом просто Стили подправить (CSS), Если CSS хотя бы чуток знаете (имеете представление что это и где), то проблем возникнуть никаких не должно.
Если спрос будет на Карту, может, сделаю в виде плагина, посмотрим, но пока она просто в тему вставляется.
Ноябрь 10th, 2009 Комментариев: 13
Цитировать
Я пока, Игорь, на такое не решаюсь. Ворд у меня 2.7.1., я еще не разу не обновлялась, попробовала, блог стал невидим, я все вернула тут же на место и отложила это до лучших времен. С картой сайта тоже возилась долго, даже описала свои злоключения, поэтому пока решила не эксперементировать.
Ноябрь 23rd, 2009 Комментариев: 2
Цитировать
А как сделать дерево категорий, чтобы выворачивались подкатегории, это с помощью какого плагина?
Поставила Wp-dTree, но одну из категорий он не показывает.
Ноябрь 24th, 2009 Комментариев: 77
Цитировать
Возможно, Категория удалена каким-то другим плагином, например, Ultimate Category Excluder.
Ноябрь 24th, 2009 Комментариев: 2
Цитировать
Все, уже исправила, дело было в настройках плагина – по умолчанию не показывал первую категорию.
Декабрь 20th, 2009 Комментариев: 2
Цитировать
Вот у меня возник вопрос. Есть функция use_desc_for_title = «1″ Она показывает титле к рубрике. А как полностью убрать титле, чтобы оно не отображалось, чтобы его не было.
Декабрь 20th, 2009 Комментариев: 77
Цитировать
Судя по всему, речь идет об этом?
Template tags .
<?php wp_list_cats('use_desc_for_title=0&children=0'); ?>
Подробнее:
Декабрь 21st, 2009 Комментариев: 2
Цитировать
Речь об этом. Если я ставлю параметр use_desc_for_title=0, то показывается дефолтный титл в ссылке рубрике. Если 1, то из описания рубрики. А мне же нужно его полностью убрать, чтобы титл или был пустой или вовсе его не было. По ссылке выше решения не нашел.
Декабрь 21st, 2009 Комментариев: 77
Цитировать
Если полностью удалить Титул у Категорий (Рубрик) нужно, то есть 2 варианта:
1. Геморойный. Во время генерации веб-страницы в браузере через скрипты, например, используя библиотеку скриптов jquery можно делать подмену любого куска кода после тега «body».
2. Простой. Зайти в админку, выбрать слева в блоке «Записи» –> Категории (Рубрики), затем навести мышку на Категорию, появятся всплывающие ссылки «Изменить | Свойства | Удалить», кликнуть «изменить» (Изменить рубрику), а там уже просто удалить Титул, затем «Сохранить». Выполнить для всех категорий.
Других способов нет.
Январь 15th, 2010 Комментариев: 2
Цитировать
Скажите, а разве для get_categories работает параметр depth=2?
<?php
$cats = get_categories('hide_empty=0&child_of=16&depth=2');
foreach ((array)$cats as $cat) {
$catID = $cat->cat_ID;
$catnm = $cat->cat_name;
if ($category[0]->cat_ID == $catID && $tagged == '')
$class = 'class="current"';
else $class = 'class=""';
echo '<li id="cat-'.$catID.'" '.$class.'><a>'.$catnm.'</a></li>';
}
?>
Январь 15th, 2010 Комментариев: 77
Цитировать
Yeva, насколько помню, подобные примеры видел в Кодексе. Некоторые вещи писал у себя не проверяя (не делал у себя подкатегории и прочее), поэтому для конкретного случая сказать не могу. Если вопрос стоит остро, можно покопаться в кодах, посмотреть… Когда писал топик, стоял ВП 2.7.1-2.7.5 (?), сейчас 2.8.5, но уже вышел 2.9.1. Просто, возможно, в какой-то версии работает, в какой-то нет… Нужно разбираться
Январь 15th, 2010 Комментариев: 2
Цитировать
в 2.9
не работает
Апрель 16th, 2010 Комментариев: 1
Цитировать
Игорь, я вижу, вы прекрасно разбираетесь как в php, так и в WP. Не могли бы вы посетитьтему на форуме для решения вопроса, указанного в ней:
Сам вопрос:
как сделать на странице категории вывод всех постов из каждой ее подкатегории:
Страница с категорией 1:
–подкатегория 1.1
—-post 1 подкатегории 1.1, в который входит title и the_content подкатегории 1.1
—-post 2 подкатегории 1.1, в который входит title и the_content подкатегории 1.1
–подкатегория 1.2
—-post 1 подкатегории 1.2, в который входит title и the_content подкатегории 1.2
….. и т.д.
Думаю, данное решение было бы вам интересным, и буду очень признателен за вашу помощь!
Апрель 16th, 2010 Комментариев: 77
Цитировать
Если в течении суток никто не отзовется на форуме, завтра вечером постараюсь выложить готовый вариант, сейчас не могу – занимаюсь «переездом» на другой хостинг.
Апрель 19th, 2010 Комментариев: 77
Цитировать
Nikolas_Sharp, прочтал сейчас несколько рз ваш вопрос по выводу подкатегорий и постов. Поставил на Денвер WP2.9.2, он в точности так и выводит подкатегории и посты. Не моу понять, в чем загвоздка у вас? Обновите WP 2.7 до версии 2.9, проверьте еще разок. Может, нужно не подготегории выводить, а под-подкатегории?
Я в танке
Если сделаете простенькую схемку, постараюсь помочь, а то, что указано выше, идет по умолчанию.
Август 25th, 2010 Комментариев: 6
Цитировать
Здравствуйте! Подскажите пожалуйста как еще можно сделать сортировку категорий?
Если переменная $cat отменяет orderby=name
Август 25th, 2010 Комментариев: 6
Цитировать
код не вставился wp_list_categories(‘orderby=name&hierarchical=0&title_li=&child_of=’.$cat);
Август 25th, 2010 Комментариев: 77
Цитировать
Здравствуйте, Denis. Не понял, что вам нужно. Опишите задачу, что вы хотите сделать с категориями, подумаю на досуге как реализовать. Стандартные функции подзабыл, их не использую, пишу свои, если есть необходимость; когда топик писал, был WP2.7, могло что-то измениться в стандартных функциях Вордпресса.
Что касается сортировки в PHP, то SQL-запросом сортировать данные можно как угодно, например, для категорий:
- по количеству комментариев;
- по количеству публикаций;
- по именам;
За эту сортировку отвечает запись «ORDER BY (условие)».
Как в прямом порядке (ASC), так и в обратном (DESC), за это отвечает запись в запросе «ASC» и «DESC» сразу после «ORDER BY (условие)».
Если требуется под заказ написать какую-то сложную функцию (абсолютно любую), можете стучать в любое время в контакты: zgr@bk.ru (это ася, агент, почта).
Август 25th, 2010 Комментариев: 6
Цитировать
Здравствуйте! Этой функцией я вывожу в Категории список ПодКатегорий. И мне нужно ПодКатегории отсортировать по алфавиту без иерархии вложенности.
Август 26th, 2010 Комментариев: 77
Цитировать
Здравствуйте, Denis. Не понял, в чем возникла у вас проблема, посмотрел новые функции Вордпресса 3.0, все должно работать у вас, если нет, то обновите версию до актуальной. Категории итак сортируются по имени – это условие по умолчанию (orderby=name), но сортировать можно и по группам (orderby=group) – я это так понял; эх, сто лет уже не копался в коде Вордпресса.
Сейчас нет времени выяснять как это делается – 2 сайта ремонтирую, включая этот, а вы весьма не многословны и вытягивать из вас каждое слово нет возможности. На будущее: пишите проблемы конкретней, описывайте детали (версию блога, страницу, на которой проблемы, пример, который использовали и не получился – какие функции и т.д.), я очень занят, чтоб прыгать вокруг костра с бубном, гадая в чем проблема у вас.
Сейчас нет свободного домена потестить функции, поэтому просто написал «на коленке» еще один примерчик вывода подкатегорий в главных категориях с сортировкой… Его можно дорабатывать до одури, увеличивая код до 5-7 раз, но думаю, уже есть от чего отталкиваться вам… надеюсь, хоть чем-то помог; если что-то не понятно, спрашивайте, постараюсь расписать функции еще подробней.
П.С. Сортировка массивов в php (все функции …sort()) описаны в разделе «Функции работы с массивами»:http://php.net/manual/en/function.sort.php
Август 26th, 2010 Комментариев: 6
Цитировать
День добрый! Если бы вы вывели в категории список подкатегорий с помощью моего кода wp_list_categories(‘orderby=name&hierarchical=0&title_li=&child_of=’.$cat);
который я написал во втором комменте, вам бы сразу стало ясно о чем я говорю. Повторюсь, из данного кода видно, что сортировка идет по name и иерархия отключена. НО $cat отменяет значение orderby=name. Вот я и пытаюсь найти решение этой отмены сортировки по name. Использую wp 3.0.1 (так же смотрел и на 2.9.2). Спасибо за ваше внимание к моей проблеме
Август 26th, 2010 Комментариев: 77
Цитировать
Ох, елки, извиняюсь, чистил спам, отвлекся и пропустил один ваш комментарий, сейчас посмотрю, что можно придумать.
Август 26th, 2010 Комментариев: 77
Цитировать
Странно, что не работает стандартная функция, хотя в хелпах пишут, что должна. Первое, что приходит на ум – пересобрать свой массив из категорий, отсортировать как надо и распечатать. Проверить, к сожалению, не на чем, но по идее должно работать, вот примерчик:
#Собираем нужные категории в переменную.
$cats = wp_list_categories("orderby=name&hierarchical=0&title_li=&hide_empty=0&echo=0&child_of=$id");
if (isset($cats) && trim($cats)!='') {
#Устанавливаем разделитель для нового массива категорий.
$cats = str_replace(' </li> ','</li>|',$cats);
$arr = explode('|',$cats); unset($cats); #Получаем массив категорий.
foreach ($arr as $c) {
preg_match('|<(.*?)</a>|i',$c,$r);
if (isset($r[1]) && $r[1]!='') {$cats[$r[1]] = $c; unset($r);}
}
if (isset($cats) && is_array($cats) && $cats!=null) {
ksort($cats); #Сортируем массив категорий как нам нужно.
foreach ($cats as $c) echo $c; #Печатаем результат.
unset($c,$cats,$arr); #Удаляем временный мусор.
}
}
Август 26th, 2010 Комментариев: 6
Цитировать
Ваш код выдал вот такие ошибки
Warning: ksort() expects parameter 1 to be array, null given in /…/archive.php on line 32
Warning: Invalid argument supplied for foreach() in /…/archive.php on line 33
вот эти сторочки
ksort($cats);
foreach ($cats as $c) echo $c;
Август 26th, 2010 Комментариев: 77
Цитировать
М… да, если подкатегорий нет, нужно проверку на «нул» поставить, забыл;
обновил предыдущий комментарий. Если выдаст ошибку какую-либо, то нужно уже каждую переменную на сайте у вас распечатывать и смотреть, где они теряются, а так код должен работать… Вы тоже подключайтесь, не копируйте вслепую
Август 27th, 2010 Комментариев: 6
Цитировать
Спасибо большое за код! Удачи вам во всем
Октябрь 10th, 2010 Комментариев: 2
Цитировать
ДОбрый день.
У меня появилось желание выводить в имена всех категорий поста – если мы находимся на главной, или имена всех категорий всех рубрик к которым относится тот пост на котором мы находимся.
Так же хотел добавить вывод и меток по такой же схеме, но ломая голову и перебирая все параметры вывода столкнулся с проблемой вывода лишь названий что меток что категорий.
Или проблемы нет и я лишь что то упустил? Уточню: WP постоянно выдаёт ссылки, оформленные или нет, а мне нужны лишь названия.
Как вам идея? И прошу помощи.
Говорят что Джумла это сама делает автоматически. А у WP есть такие стандартные решения кроме вывода bloginfo(‘description’) ? Потому что он мне не подходит.
Спасибо.
Октябрь 10th, 2010 Комментариев: 77
Цитировать
Привет, Андрей, не совсем понял что вы хотите – несвязно как-то получилось первое предложение. Также не ясно, в чем у вас проблема возникла при выводе имени категории? Если вам нужны просто названия (без ссылок) категорий, то делается так:
$args = '';
$categories = get_categories($args);
echo 'Категория: '.$categories[0]->name.'
'; //Вывод одной категории.
print_r($categories); //Вывод объекта всех категорий.
Категории имеют очень большое множество перекрестных параметров – можно вытащить абсолютно все: кол-во постов, комментариев, дескриптцию, дату обновления и т.д. – все, что угодно и все это оформить под свой диз.
Октябрь 11th, 2010 Комментариев: 2
Цитировать
Я дико извиняюсь что не проверил свой камент, не поставил нужные тэги и код не прошёл.
Изначально огромное спасибо за подсказку.
А дело в том что, я захотел выводить в HTML теги meta name=»description» и meta name=»keywords» именна всех категорий и меток.
То есть, если мы находимсяна главной – выводятся все категории, если мы находимся в категории то выводятся подкатегории, если открыт пост – то все категории которые относятся к этому посту.
Да кстати. Пытаюсь вникнуть но видимо мне нужно еще время. print_r($categories); //Вывод объекта всех категорий. – понял вывел…
а какой цикл нужно сделать или условие чтобы вывести все названия категорий всего блога?
Перечитываю вашу статью и все параметры но не могу понять – $categories[0] – вот этот ноль – это порядковая нумерация (не ID) категорий?
В моёй тестовой базе – вышел объект всех категорий где есть три категории: [0],[1],[2].
Я спрашивал: А есть ли у WP стандартные методы вывода названий меток или категорий в в HTML теги meta name=»description» и meta name=»keywords» ?
Или стандартно WP может выводить только инфо о блоге?
Да и не могли бы подсказать? А как вытащить имена меток? Хоть этот вопрос и не к этой статье.
Еще раз спасибо. Особенно за то, что за последние 3-ое суток вы откликнулись вторым а помогли первым и единственным.
Октябрь 11th, 2010 Комментариев: 77
Цитировать
Андрей, не ленитесь, почитайте еще раз внимательно топик и саму документацию (http://codex.wordpress.org/Template_Tags/ ), то, что вам нужно расписано очень подробно с примерами. Что вы подразумеваете под фразой «стандартные методы вывода» – не знаю, я пользуюсь PHP – он стандартен у всех в минимальной установке на сервере, но как правило, почти все библиотеки тоже по умолчанию на сервер устанавливают. Циклы вывода информации в PHP обычно такие: while(){}, for(){}, foreach(){}, если они не подходят для использования, можно выкрутиться как-то иначе – зависит от ситуации.
Чтоб не искать, вот примеры готовые.
Проверить, на главной мы странице сейчас или нет, можно разными способами в PHP – зависит от настроек Вордпресса и сервера:
$is_main = ($_SERVER['REQUEST_URI']=='/' || $_SERVER['REQUEST_URI']=='')?true:false;
$is_main = ('http://'.$_SERVER['SERVER_NAME']==get_bloginfo('wpurl'))?true:false;
$is_main = isset($_SERVER['REDIRECT_URL'])?true:false;
$is_main = array_key_exists('REDIRECT_URL',$_SERVER)?true:false;
$is_main = ($_SERVER['QUERY_STRING']=='')?true:false;
Выбирайте любой рабочий. Далее распечатка:
if ($is_main) {
//Если на главной странице, то печатаем все категории.
$args = ''; $cats = '';
$categories = get_categories($args);
foreach ($categories as $cat) $cats .= "< li >$cat< /li >";
echo 'Всего Категорий: '.count($categories)."< ul >$cats< /ul >";
}
unset($is_main,$args,$cats,$cat,$categories);
Вывод данных категории (все распечатайте и уточните что вам нужно):
echo 'ID: '.$categories->cat_ID;
echo 'Name: '.$categories->name;
echo 'Description: '.$categories->category_description;
Меты.
$args = '';
$categories = get_categories($args);
the_meta(); #Все меты: title, description, keywords, другие.
$post_id = 1;
$key = 'keywords';
$single = 1; #Переменная, 0 - массив
$meta = get_post_meta($post_id,$key,$single);
echo '< pre >'; print_r($meta); echo '< /pre >';
Январь 7th, 2011 Комментариев: 3
Цитировать
Добрый день! С Праздником вас! Спасибо за статью, надеюсь вы сможете мне помочь.
WordPress 3.0.4, стандартная тема Twenty Ten 1.1 от the WordPress team
Есть 10 страниц в виде верхнего меню. Хочу чтобы при открытии каждой из страницы открывался только определенный сайдбар только с одной с страницей с подстраницами.
Для этого сделал 10 шаблонов страниц для каждой.
В каждом шаблоне вывожу только одну страницу
<?php wp_list_pages('include=88&title_li=' . __('') . '' ); ?>
Все отлично, но подстраницы (субстраницы) не отображаются.
По вашей статье сделал так:
<?php wp_list_pages('include=88&child_of=88&title_li=' . __('') . '' ); ?>
Но это не помогает, что я не так делаю. Заранее спасибо за помощь
Январь 7th, 2011 Комментариев: 77
Цитировать
Vesb, спасибо, взаимно
Вам нужно только написать инклюд и всё:
< ?php wp_list_pages('include=88&title_li=' . __('') . '' ); ?>
но раз так не работает, то укажите тогда еще глубину и «детей»:
< ?php wp_list_pages('include=88&child_of=0&depth=0&title_li=' . __('') . '' ); ?>
Если и так не заработает, то в ближайший день-два посмотрю новую версию WP.
Январь 7th, 2011 Комментариев: 3
Цитировать
Это не помогло.
Сделал так:
Вроде даже лучше получилось. Отображаются только список подстраниц без самой страницы, но почему то полетело форматирование.
Январь 7th, 2011 Комментариев: 3
Цитировать
Кстати, у вас форма для ввода комментариев очень узкая, писать ужасно неудобно. (Firfox 3.6.10)
В Опере все отлично
Январь 8th, 2011 Комментариев: 77
Цитировать
Код съело, ну, главное, что получилось… Форматирование придётся вам в CSS подправить.
М… проверю форму, спасибо. Каждый раз, как плагин какой-то обновляю, постоянно блог рвёт, замучался уже постоянно всё переписывать; как руки дойдут, попробую выкинуть все плагины и нормально их в сам блог вписать, чтоб везде всё гладко было.
Март 30th, 2012 Комментариев: 1
Цитировать
А как по простому вывести в сайдбаре спискок постов в категорях? Типа:
Категория 1
Название поста 1
Название поста 2
Название поста 3
Категория 2
Название поста 4
Название поста 5
и т.д.
Не надо никаких заморочек с раскрыванием и т.д., просто дерево постов и чтоб на пост была ссылка.
Уже несколько часов ищу, уже глаза болят, лучшее что нашел это wp-dtree, но он слишком навороченный и там лишние ссылки на категориях для сворачивания/разворачивания и трудно оформить с помощью css.