seo-блог

SEO-блог Остров МЫСЛЕЙ: сео (поисковая оптимизация), монетизация и раскрутка сайта, ресурсы сети.

В избранное :: В загрузку :: В печать
Bookmark and Share

Программирование WordPress: категории




#171 Wordpress.  Программирование WordPress: категории

Для юзабилити, а так же хорошей оптимизации и удобной навигации блога является вывод списка Категорий блога. Рассмотрим простой тег (tag) шаблона (темплейта от англ. template) CMS WordPress get_categories(), используемый в мультилупах для вывода этого самого списка Категорий блога и другие теги. В дальнейшем, зная как выводить список постов блога (функция get_posts), это позволит нам создать практически любой сложности Карту блога, которой будет посвящен следующий топик.

Максимальный доступ к нужным функциям (например, подписка на определенную категорию, а не весь блог) и дополнительной информации позволит также повысить юзабилити (использование) вашего ресурса.

Итак, первым делом, нам нужно получить встроенные переменные из функции get_categories, выведем все аргументы, что эта функция содержит:

<?php
$args = array(
 'type'						=> 'post',
 'child_of'					=> 0,
 'parent'					=> 0,
 'orderby'					=> 'name',
 'order'					=> 'ASC',
 'hide_empty'				=> true,
 'include_last_update_time'	=> false,
 'hierarchical'				=> 1,
 'exclude'					=> ,
 'include'					=> ,
 'number'					=> ,
 'pad_counts'				=> false
);
?>

Теперь рассмотрим все варианты, которые могут иметь аргументы функции 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:

<?php
  foreach ($categories as $cat) {
    echo $cat->category_nicename;
    echo $cat->cat_name;
    echo ' ('.$cat->category_count.')';
    echo '<br />';
 }
?>

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

<?php
  //Настройки вывода категорий.
  $isle_cat_count_display = 0; //0 - выкл., 1 - вкл.

  //Цикл вывода всех категорий.
  foreach ($categories as $cat) {
    if ($isle_count_display == 1)
      $isle_cat_count = "(".$cat->category_count.")";
    else $isle_cat_count = "";
    echo $cat->category_nicename;
    echo $cat->cat_name;
    echo $isle_cat_count.'<br />';
 }
?>

Таким образом мы можем разделить весь код на две части: настройки и вывод категорий, но в идеале нужно было бы код делить на три части:

  • Настройки вывода Категорий.
  • Обработка вывода категорий — присвоение переменным готовых результатов с оформлением в цикле. При этом нужно все переменные сложить в один массив (одно- двух- или многомерный, в зависимости от количества и сложности выводимых данных).
  • Вывод готовых данных из массива в html-шаблоне.

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

В большинстве случаев для быстрого создания списка Категорий в сайдбаре на первых порах вполне сгодится встроенная функция CMS WordPress wp_list_categories():

<?php
$args = array(
  'show_option_all'		=> ,
  'orderby'				=> 'name',
  'order'				=> 'ASC',
  'show_last_update'	=> 0,
  'style'				=> 'list',
  'show_count'			=> 0,
  'hide_empty'			=> 1,
  'use_desc_for_title'	=> 1,
  'child_of'			=> 0,
  'feed'				=> ,
  'feed_type'			=> ,
  'feed_image'			=> ,
  'exclude'				=> ,
  'exclude_tree'		=> ,
  'include'				=> ,
  'current_category'	=> 0,
  'hierarchical'		=> true,
  'title_li'			=> __( 'Categories' ),
  'number'				=> NULL,
  'echo'				=> 1,
  'depth'				=> 0
);
?>

Пояснения:

  • 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
  wp_list_categories('
    orderby=name & order=ASC
    & show_last_updated=1 & show_count=1
    & feed_image=/wp-content/themes/default/images/rss.png
    & hide_empty=1 & exclude=38
  ');
?>

Другим способом (в цикле) "текущую" категорию можно подсветить так:

<?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>';
}
?>

Источники:

  • http://codex.wordpress.org/Template_Tags/wp_list_categories

Попробуем вытащить некоторые значения Категорий из БД.

<?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, не существует, то поставить дефолтную иконку, общую для всех категорий.

Вариант 1. Вывод картинки по имени категории.

<?php
  $cat = get_the_category();
  $cat = $cat[0];
  $cat_nm = $cat->cat_name;
  $scr = get_bloginfo('template_directory');
  $scr .= '/icons/'.$cat_nm.'.png';
  echo '<img src="'.$scr.'" alt="Category Icon" />
?>

Вариант 2. Вывод картинки по ID для всех Категорий (гораздо удобней).

<?php
  foreach((get_the_category()) as $cat) {
    $scr = get_bloginfo('template_directory');
    $scr .= '/icons/cat-'.$cat->cat_ID.'.png';
    echo '<img src="'.$scr.'" alt="Category Icon" />';
}
?>

Вариант 3.

<?php
  $post_thumbnail = get_post_custom_values('thumbnail');
  if ($post_thumbnail)
    echo '<img src="'.$post_thumbnail.'" alt="'.the_title().'" class="thumbnail" />';
  else {
    $url_path = str_replace(get_bloginfo('url'), '', get_bloginfo('template_directory'));
    $cat_img_path = get_bloginfo('template_directory').'/images/';
    $cat_img_name = $_SERVER['DOCUMENT_ROOT'].$url_path. '/images/isle_cat_thumbnail_';
    foreach ((get_the_category()) as $category) {
      $cat_id = $category->cat_ID;
      $cat_nm = $category->cat_name;
      $file_img = $cat_img_name.$cat_id.'.png';
      if (file_exists($file_img))
        $cat_img = $cat_img_path.'isle_cat_thumbnail_'.$cat_id.'.png';
      else $cat_img = $cat_img_path.'isle_cat_thumbnail_default.png';
      $alt = '#'.$cat_id.' '.$cat_nm.'. ';
      ?><img src="<?php echo $cat_img; ?>"
        alt="<?php echo $alt; the_title(); ?>" class="thumbnail" />
<?php } ?>

Запись

<?php $post_thumbnail = get_post_custom_values('thumbnail'); ?>

Можно записать и так:

<?php $post_thumbnail = get_post_meta($post->ID,'thumbnail',true); ?>

Именно так реализованны картинки 125х125 px на этом блоге — Остров МЫСЛЕЙ. В дополнительном поле нужно ввести ключ "thumbnail" и путь к картинке, чтоб она отразилась для конкретного поста, иначе картинка будет назначена по умолчанию для всех постов конкретной Категории, если нет картинки в папке для конкретной Категории, то буден выведена дефолтная картинка, установленная для всех категорий. Данный код можно вставить в файлы шаблона Темы CMS WordPress index.php (шаблон главной страницы) и single.php (шаблон полной статьи). Если требуется разместить что-либо (какую-то информацию) или просто изменить стиль одной или нескольких отдельных Категории, то можно сделать это проще, например, таким образом:

<?php
  if (in_category(1)) echo '<div class="cat-1"></div>';
  elseif (in_category(2)) echo '<div class="cat-2"></div>';
  else echo '';
?>

И напоследок. Если нужно реализовать, например, под шапкой блога сайдбар, показывающий место нахождение читателя: Остров МЫСЛЕЙ >> Категория >> Пост, то это можно сделать, например, вот так:

<?php
  $blog_url = get_bloginfo(url);
  $blog_name = get_bloginfo(name);
  $blog_desc = get_bloginfo(description);
  $category = get_the_category();
  $cat_url = get_category_link();
  $cat_name = $category->cat_name;
  $cat_desc = $category->category_description;
  $post_name = get_the_title();
  $post_url = get_permalink();
  echo '<a href="'.$blog_url.'" title="'.$blog_desc.'">'.$blog_name.'</a> >> ';
  echo '<a href="'.$cat_url.'" title="'.$cat_desc.'">'.$cat_name.'</a> >> ';
  echo $post_name;
?>

В 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.
  • Полезные страницы:
    • http://codex.wordpress.org/ —> Category_Templates, Template_Tags, Category:Template_Tags, Templates, Database_Description.
    • Forum: http://wordpress.org/tags/get_categories

На странице перечня всех встроенных функций 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, можно записать так:

$names =(object)$mynames; либо: $names =(array)$mynames;

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

Нашли ошибки, знаете больше? - Пишите, исправим и дополним.


Другие статьи по теме seo (оптимизация), монетизации и раскрутке:

Просмотров: 13,694
Комментариев: Комментарии (37)
Опубликованно: Понедельник, Ноябрь 9th, 2009 в 15:34
Обновлено: 26 Август 2010 в 11:25.
Директории: Wordpress
Автор: admin, все авторы.


В статье: 2535 слов. Ссылки на странице.
Bookmark and Share
УжасноПлохоНормальноХорошоОтлично
(голоса: 3, оценка: 5.00 из 5)
Источник: http://isle-blog.ru/wordpress/get_categories/


Понравилась статья? - Не пропустите следующую, подпишитесь на RSS-канал[?], e-mail или читайте блог Остров МЫСЛЕЙ через Яндекс.Ленту или Google.Reader.

Также Вы можете оставить комментарий, или trackback[?] на Вашем сайте.
На эту статью ссылаются:



Эту статью находят по поисковым запросам:
Оставьте свой комментарий на seo-блоге Остров МЫСЛЕЙ
Нам важно Ваше мнение. (Комментарии (37))
Марина пишет:
Ноябрь 10th, 2009 Комментариев: 13
#1

Игорь, карта этого блога сделана вышеописанным способом? Такой я еще не видела. Но, мне кажется, что это сложно.

admin пишет:
Ноябрь 10th, 2009 Комментариев: 77
#2

Да, я Карту делал описанным способом, через две встроенные функции – get_posts и get_categories, хотя можно сделать прямыми запросами в БД, можно через другие функции или создать шаблон своих собственных запросов в своей собственной функции – вариантов много, как можно вывести данные, а последняя версия ВП (2.8.5) имеет много зеркальных Таблиц Данных – на любой цвет и вкус.

Карта у меня одним файлом, если есть интерес, я перешлю файлик и объясню, как его настроить, также постараюсь подогнать более-менее под дизайн. Файл достаточно просто заинклюдить, чтоб Карта работала, потом просто Стили подправить (CSS), Если CSS хотя бы чуток знаете (имеете представление что это и где), то проблем возникнуть никаких не должно.

Если спрос будет на Карту, может, сделаю в виде плагина, посмотрим, но пока она просто в тему вставляется.

Марина пишет:
Ноябрь 10th, 2009 Комментариев: 13
#3

Я пока, Игорь, на такое не решаюсь. Ворд у меня 2.7.1., я еще не разу не обновлялась, попробовала, блог стал невидим, я все вернула тут же на место и отложила это до лучших времен. С картой сайта тоже возилась долго, даже описала свои злоключения, поэтому пока решила не эксперементировать.

Оля пишет:
Ноябрь 23rd, 2009 Комментариев: 2
#4

А как сделать дерево категорий, чтобы выворачивались подкатегории, это с помощью какого плагина?
Поставила Wp-dTree, но одну из категорий он не показывает.

admin пишет:
Ноябрь 24th, 2009 Комментариев: 77
#5

Возможно, Категория удалена каким-то другим плагином, например, Ultimate Category Excluder.

Оля пишет:
Ноябрь 24th, 2009 Комментариев: 2
#6

Все, уже исправила, дело было в настройках плагина – по умолчанию не показывал первую категорию.

CoolSeoMan пишет:
Декабрь 20th, 2009 Комментариев: 2
#7

Вот у меня возник вопрос. Есть функция use_desc_for_title = «1″ Она показывает титле к рубрике. А как полностью убрать титле, чтобы оно не отображалось, чтобы его не было.

admin пишет:
Декабрь 20th, 2009 Комментариев: 77
#8

Судя по всему, речь идет об этом?
<?php wp_list_cats('use_desc_for_title=0&children=0'); ?>
Подробнее: Template tags.

CoolSeoMan пишет:
Декабрь 21st, 2009 Комментариев: 2
#9

Речь об этом. Если я ставлю параметр use_desc_for_title=0, то показывается дефолтный титл в ссылке рубрике. Если 1, то из описания рубрики. А мне же нужно его полностью убрать, чтобы титл или был пустой или вовсе его не было. По ссылке выше решения не нашел.

admin пишет:
Декабрь 21st, 2009 Комментариев: 77
#10

Если полностью удалить Титул у Категорий (Рубрик) нужно, то есть 2 варианта:

1. Геморойный. Во время генерации веб-страницы в браузере через скрипты, например, используя библиотеку скриптов jquery можно делать подмену любого куска кода после тега «body».

2. Простой. Зайти в админку, выбрать слева в блоке «Записи» –> Категории (Рубрики), затем навести мышку на Категорию, появятся всплывающие ссылки «Изменить | Свойства | Удалить», кликнуть «изменить» (Изменить рубрику), а там уже просто удалить Титул, затем «Сохранить». Выполнить для всех категорий.

Других способов нет.

Yeva пишет:
Январь 15th, 2010 Комментариев: 2
#11

Скажите, а разве для 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>';
}
?>

admin пишет:
Январь 15th, 2010 Комментариев: 77
#12

Yeva, насколько помню, подобные примеры видел в Кодексе. Некоторые вещи писал у себя не проверяя (не делал у себя подкатегории и прочее), поэтому для конкретного случая сказать не могу. Если вопрос стоит остро, можно покопаться в кодах, посмотреть… Когда писал топик, стоял ВП 2.7.1-2.7.5 (?), сейчас 2.8.5, но уже вышел 2.9.1. Просто, возможно, в какой-то версии работает, в какой-то нет… Нужно разбираться :)

Yeva пишет:
Январь 15th, 2010 Комментариев: 2
#13

в 2.9
не работает

Nikolas_Sharp пишет:
Апрель 16th, 2010 Комментариев: 1
#14

Игорь, я вижу, вы прекрасно разбираетесь как в 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
….. и т.д.

Думаю, данное решение было бы вам интересным, и буду очень признателен за вашу помощь!

admin пишет:
Апрель 16th, 2010 Комментариев: 77
#15

Если в течении суток никто не отзовется на форуме, завтра вечером постараюсь выложить готовый вариант, сейчас не могу – занимаюсь «переездом» на другой хостинг.

admin пишет:
Апрель 19th, 2010 Комментариев: 77
#16

Nikolas_Sharp, прочтал сейчас несколько рз ваш вопрос по выводу подкатегорий и постов. Поставил на Денвер WP2.9.2, он в точности так и выводит подкатегории и посты. Не моу понять, в чем загвоздка у вас? Обновите WP 2.7 до версии 2.9, проверьте еще разок. Может, нужно не подготегории выводить, а под-подкатегории?

Я в танке :) Если сделаете простенькую схемку, постараюсь помочь, а то, что указано выше, идет по умолчанию.

Denis пишет:
Август 25th, 2010 Комментариев: 6
#17

Здравствуйте! Подскажите пожалуйста как еще можно сделать сортировку категорий?

Если переменная $cat отменяет orderby=name

Denis пишет:
Август 25th, 2010 Комментариев: 6
#18

код не вставился wp_list_categories(‘orderby=name&hierarchical=0&title_li=&child_of=’.$cat);

admin пишет:
Август 25th, 2010 Комментариев: 77
#19

Здравствуйте, Denis. Не понял, что вам нужно. Опишите задачу, что вы хотите сделать с категориями, подумаю на досуге как реализовать. Стандартные функции подзабыл, их не использую, пишу свои, если есть необходимость; когда топик писал, был WP2.7, могло что-то измениться в стандартных функциях Вордпресса.

Что касается сортировки в PHP, то SQL-запросом сортировать данные можно как угодно, например, для категорий:

- по количеству комментариев;
- по количеству публикаций;
- по именам;

За эту сортировку отвечает запись «ORDER BY (условие)».

Как в прямом порядке (ASC), так и в обратном (DESC), за это отвечает запись в запросе «ASC» и «DESC» сразу после «ORDER BY (условие)».

Если требуется под заказ написать какую-то сложную функцию (абсолютно любую), можете стучать в любое время в контакты: zgr@bk.ru (это ася, агент, почта).

Denis пишет:
Август 25th, 2010 Комментариев: 6
#20

Здравствуйте! Этой функцией я вывожу в Категории список ПодКатегорий. И мне нужно ПодКатегории отсортировать по алфавиту без иерархии вложенности.

admin пишет:
Август 26th, 2010 Комментариев: 77
#21

Здравствуйте, Denis. Не понял, в чем возникла у вас проблема, посмотрел новые функции Вордпресса 3.0, все должно работать у вас, если нет, то обновите версию до актуальной. Категории итак сортируются по имени – это условие по умолчанию (orderby=name), но сортировать можно и по группам (orderby=group) – я это так понял; эх, сто лет уже не копался в коде Вордпресса.

Сейчас нет времени выяснять как это делается – 2 сайта ремонтирую, включая этот, а вы весьма не многословны и вытягивать из вас каждое слово нет возможности. На будущее: пишите проблемы конкретней, описывайте детали (версию блога, страницу, на которой проблемы, пример, который использовали и не получился – какие функции и т.д.), я очень занят, чтоб прыгать вокруг костра с бубном, гадая в чем проблема у вас. ;-) Сейчас нет свободного домена потестить функции, поэтому просто написал «на коленке» еще один примерчик вывода подкатегорий в главных категориях с сортировкой… Его можно дорабатывать до одури, увеличивая код до 5-7 раз, но думаю, уже есть от чего отталкиваться вам… надеюсь, хоть чем-то помог; если что-то не понятно, спрашивайте, постараюсь расписать функции еще подробней.

П.С. Сортировка массивов в php (все функции …sort()) описаны в разделе «Функции работы с массивами»: http://php.net/manual/en/function.sort.php

Denis пишет:
Август 26th, 2010 Комментариев: 6
#22

День добрый! Если бы вы вывели в категории список подкатегорий с помощью моего кода wp_list_categories(‘orderby=name&hierarchical=0&title_li=&child_of=’.$cat);
который я написал во втором комменте, вам бы сразу стало ясно о чем я говорю. Повторюсь, из данного кода видно, что сортировка идет по name и иерархия отключена. НО $cat отменяет значение orderby=name. Вот я и пытаюсь найти решение этой отмены сортировки по name. Использую wp 3.0.1 (так же смотрел и на 2.9.2). Спасибо за ваше внимание к моей проблеме

admin пишет:
Август 26th, 2010 Комментариев: 77
#23

Ох, елки, извиняюсь, чистил спам, отвлекся и пропустил один ваш комментарий, сейчас посмотрю, что можно придумать.

admin пишет:
Август 26th, 2010 Комментариев: 77
#24

Странно, что не работает стандартная функция, хотя в хелпах пишут, что должна. Первое, что приходит на ум – пересобрать свой массив из категорий, отсортировать как надо и распечатать. Проверить, к сожалению, не на чем, но по идее должно работать, вот примерчик:

#Собираем нужные категории в переменную.
$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); #Удаляем временный мусор.
}
}

Denis пишет:
Август 26th, 2010 Комментариев: 6
#25

Ваш код выдал вот такие ошибки
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;

admin пишет:
Август 26th, 2010 Комментариев: 77
#26

М… да, если подкатегорий нет, нужно проверку на «нул» поставить, забыл; :oops: обновил предыдущий комментарий. Если выдаст ошибку какую-либо, то нужно уже каждую переменную на сайте у вас распечатывать и смотреть, где они теряются, а так код должен работать… Вы тоже подключайтесь, не копируйте вслепую ;-)

Denis пишет:
Август 27th, 2010 Комментариев: 6
#27

Спасибо большое за код! Удачи вам во всем

Андрей пишет:
Октябрь 10th, 2010 Комментариев: 2
#28

ДОбрый день.
У меня появилось желание выводить в имена всех категорий поста – если мы находимся на главной, или имена всех категорий всех рубрик к которым относится тот пост на котором мы находимся.
Так же хотел добавить вывод и меток по такой же схеме, но ломая голову и перебирая все параметры вывода столкнулся с проблемой вывода лишь названий что меток что категорий.
Или проблемы нет и я лишь что то упустил? Уточню: WP постоянно выдаёт ссылки, оформленные или нет, а мне нужны лишь названия.
Как вам идея? И прошу помощи.
Говорят что Джумла это сама делает автоматически. А у WP есть такие стандартные решения кроме вывода bloginfo(‘description’) ? Потому что он мне не подходит.
Спасибо.

admin пишет:
Октябрь 10th, 2010 Комментариев: 77
#29

Привет, Андрей, не совсем понял что вы хотите – несвязно как-то получилось первое предложение. Также не ясно, в чем у вас проблема возникла при выводе имени категории? Если вам нужны просто названия (без ссылок) категорий, то делается так:

$args = '';
$categories = get_categories($args);
echo 'Категория: '.$categories[0]->name.'
'; //Вывод одной категории.
print_r($categories); //Вывод объекта всех категорий.

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

Андрей пишет:
Октябрь 11th, 2010 Комментариев: 2
#30

Я дико извиняюсь что не проверил свой камент, не поставил нужные тэги и код не прошёл.
Изначально огромное спасибо за подсказку.
А дело в том что, я захотел выводить в 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-ое суток вы откликнулись вторым а помогли первым и единственным.

admin пишет:
Октябрь 11th, 2010 Комментариев: 77
#31

Андрей, не ленитесь, почитайте еще раз внимательно топик и саму документацию (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 >';

Vesb пишет:
Январь 7th, 2011 Комментариев: 3
#32

Добрый день! С Праздником вас! Спасибо за статью, надеюсь вы сможете мне помочь.
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=' . __('') . '' ); ?>
Но это не помогает, что я не так делаю. Заранее спасибо за помощь

admin пишет:
Январь 7th, 2011 Комментариев: 77
#33

Vesb, спасибо, взаимно :)

Вам нужно только написать инклюд и всё:

< ?php wp_list_pages('include=88&title_li=' . __('') . '' ); ?>

но раз так не работает, то укажите тогда еще глубину и «детей»:

< ?php wp_list_pages('include=88&child_of=0&depth=0&title_li=' . __('') . '' ); ?>

Если и так не заработает, то в ближайший день-два посмотрю новую версию WP.

Vesb пишет:
Январь 7th, 2011 Комментариев: 3
#34

Это не помогло.
Сделал так:

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

Vesb пишет:
Январь 7th, 2011 Комментариев: 3
#35

Кстати, у вас форма для ввода комментариев очень узкая, писать ужасно неудобно. (Firfox 3.6.10)
В Опере все отлично

admin пишет:
Январь 8th, 2011 Комментариев: 77
#36

Код съело, ну, главное, что получилось… Форматирование придётся вам в CSS подправить.

М… проверю форму, спасибо. Каждый раз, как плагин какой-то обновляю, постоянно блог рвёт, замучался уже постоянно всё переписывать; как руки дойдут, попробую выкинуть все плагины и нормально их в сам блог вписать, чтоб везде всё гладко было.

SlaviO пишет:
Март 30th, 2012 Комментариев: 1
#37

А как по простому вывести в сайдбаре спискок постов в категорях? Типа:
Категория 1
Название поста 1
Название поста 2
Название поста 3
Категория 2
Название поста 4
Название поста 5
и т.д.
Не надо никаких заморочек с раскрыванием и т.д., просто дерево постов и чтоб на пост была ссылка.

Уже несколько часов ищу, уже глаза болят, лучшее что нашел это wp-dtree, но он слишком навороченный и там лишние ссылки на категориях для сворачивания/разворачивания и трудно оформить с помощью css.



RSS-канал[?] комментариев данной статьи или всего блога Остров МЫСЛЕЙ.
Для установки аватара (фотография комментатора) используйте gravatar!
Оставляя комментарий, Вы соглашаетесь с правилами комментирования.

Прокомментировать

XHTML-теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

символов осталось из 2000.

Trackbacks

    Пример: SEO, PageRank, ТИЦ, Search.
    banner banner banner
    Рекламный блок РБ3 (360x60 или 125х125 пх). Здесь может быть Ваша реклама (текст, ссылки, баннеры) - сквозная прямая ссылка на всех страницах всего за 40 $/мес. Подробности по размещению рекламы в блоге Остров МЫСЛЕЙ: 463768885, zgr@bk.ru...
    Май 2013
    Пн Вт Ср Чт Пт Сб Вс
    « Июл    
     12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
    advertising На этом месте могла
    быть Ваша реклама.
    advertising На этом месте могла
    быть Ваша реклама.
    advertising На этом месте могла
    быть Ваша реклама.
    Регистрация в блоге:

    Частые комментаторы:

    gravatar Марина
    Комментариев: 13
    Сайт: biznes-mesto.ru
    gravatar Олли
    Комментариев: 13
    Сайт: zhenskayalogika.ru
    gravatar Alex
    Комментариев: 8
    Сайт: blog.xx-web.ru
    gravatar Елена
    Комментариев: 8
    Сайт: Ru-party.ru/blogg
    gravatar Светлана Бобровская
    Комментариев: 6
    Сайт: vseuch.ru
    Пользователи:

    Администраторы: 1 (admin)
    Редакторы: 1 (admin)
    Авторы: 1 (admin)
    Публикаторы: 1 (admin)
    Зарегистрировано: 1
    Всего пользователей: 53

    Авторы:

  • admin 1 (78)

  • Статистика блога:

    Предложить работу:

    Обратная связь:

    gravatar Блогер-сеошник, веду сайты: Остров ПОЭЗЫ, Остров УСЛУГ, Остров ЛИТЕРАТУРЫ. Это техническая страница, более подробно обо мне смотрите здесь.Также приглашаю заглянуть в раздел О блоге и посетить личный блог.

    Autor: Зайва Игорь Леонидович

    E-mail: zgr@bk.ru

    ICQ: 463-768-885

    Reserve:

    Reserve:

    Рейтинг@Mail.ru Рейтинг блогов Rambler's Top100
    Также читайте раздел: Блогосфера.

    Если Вы ведете блог схожей тематики (раскрутка, оптимизация или монетизация сайта), давайте обмениваться ссылками.

    Блогролл:

    Пока пусто, но Вы можете предложить свой тематический ресурс.
    Я.ру
    Мой мир
    Мой круг
    Мир тесен
    Моя Опера
    В контакте
    В одноклассниках
    topics
    RT @RusBase: Всероссийская база данных населения http://t.co/JT9Bs9Eu 2012-02-13
    • RT @RusBase: Всероссийская база данных населения http://t.co/JT9Bs9Eu 2012-02-13
    • RT @nepenucb: Архив переписи населения теперь в общем доступе. В нём есть и ты! Бесплатный сервис поиска на http://t.co/PzmiowL7 2012-02-06
    • RT @bazapoiska: Бесплатный поиск информации о любом человеке http://t.co/siZpIVtm 2012-01-30
    • RT @adam00011: Не можете победить лишний вес? Перестаньте кушать ЭТО http://t.co/oZicB7eZ 2012-01-27
    • RT @adam00011: Национальный поиск данных http://t.co/jAuF6N7F 2012-01-26
    • More updates...

    Posting tweet...

    Nahaa.ru
    SetLinks.ru
    linkfeed.ru
    Uniplace.ru

    Sape.ru

    ProfitBlog.ru
    j2j.ru

    1ps.ru
    Regone.ru
    Seopult.ru
    Все партнеры seo-блога Остров МЫСЛЕЙ. Также читайте статью Монетизация сайта: биржи статей и ссылок, а также статью Прогон сайта; бесплатная регистрирация.
    Последние комментарии:
  • Трекбеки и пингбеки:
  • Умные деньги: Законы блогосферы | Честный бизнес
  • Эстафета продолжается в статьях и комментариях.: Это уже позже я прочитала на блоге Игоря статью “Акции,...
  • Блог Береза Владимира: Алгоритм Google или определяем PR
  • Анонс лучших статей блогосферы: КАРТА САЙТА И БРЕДОСАЙТЫ: ХИТРОСТИ И ЭФФЕКТИВНОСТЬ.


  • Бэклинки (внешние ссылки):


    Статистика ссылок
    Яндекс: 0, Гугл: 0, Яху: 0.
    Самые любимые статьи:

    Использование материалов разрешено только при указании источника.
    Подписаться на рассылку RSS всего блога или только комментариев.
    Блог рожден: 1. 10. 2008, живет: 4 года, 7 мес. и 23 дня.
    SEO-блог Остров МЫСЛЕЙ работает на WordPress
    Copyright © 2008-2013 isle-blog.ru PageRank
    Республика Казахстан, Алматы
    Widgetize!

    seo
    Этот домен продается на telderi