Wp_tag_cloud убрать рубрику по id. Зная id категории, убрать теги всех ее постов из облака тегов.

31 Август 2011

Метки: wordpress, wp, wp_tag_cloud, облако меток, облако тегов, тэги

Облако тегов WordPress по id profprogruСегодня я столкнулся со следующей проблемой: Мне нужно было исключить категорию из облака тегов. В этому категории находились статья для продвижения сайта и мне не хотелось бы выводить СЕО-теги на общее обозрение.
Итак, чтобы исключить (убрать) конкретную категорию или рубрику из облака тегов или меток в WordPress, мне пришлось снова изменять файл движка.
Все изменения мы будем производить в файле category-template(папка wp_includes), менять будем функцию wp_tag_cloud.
Итак, найдем стоку

function wp_tag_cloud

И после строк, которые исключают пустоты в тегах вордпресса и корректном их выводе,

if ( empty( $tags ) ) return;

Вставим следущие строки, которые отсеют категорию, которую нужно убрать из облака тегов:

foreach ( $tags as $key => $tag ) {
	$database = mysql_query("select * from wp_term_taxonomy where term_id='".$tag->term_id."';");
	$KW=mysql_fetch_array($database);
	$k=$KW['term_taxonomy_id'];
	$database = mysql_query("select * from wp_term_relationships where term_taxonomy_id='".$k."';");
	$KW=mysql_fetch_array($database);
	$k=$KW['object_id'];
	if (in_category( $exx, $k )){
		unset ($tags[ $key ]);}
}

Итак,

  1. Запускаем перебор всех тегов для постов wordpress;
  2. Выбираем строки из базы данных, таблица с таксономией тегов;
  3. Обрабатываем данные из базы в архив;
  4. Узнаем id нашего тега;
  5. Узнав из таксономии id нашей метки, ищем пост, к которому она привязана, снова из базы данных;
  6. Обрабатываем в архив список id постов;
  7. Проверяем, принадлежит ли текущий пост, по post id, к рубрике, которую нужно исключить из wp_tag_cloud;
  8. Если принадлежит, то удаляем из ассоциативного массива тегов текущую метку.

Теперь, нужно задать переменную $exx, которая и является id категории.
Изменяем строку

function wp_tag_cloud( $args = '' ) {

на измененную функцию wp_tag_cloud для отсеивания ненужной категории:

function wp_tag_cloud( $args = '', $exx='' ) {

По умолчанию переменная пустая, это значит, если Вы не хотите исключать категории из облака меток, то даже задавать переменную EXX не нужно.
Пример. Исключить рубрику(категорию) wordpress из облака тегов, зная ее id (35). Задать минимальный 8 размер и максимальный 15 размер шифта в облаке тэгов, и ограничить количество до 40:

<?php wp_tag_cloud('smallest=8&largest=15&number=40','35');?>

Если требуется убрать из облака тегов посты нескольких рубрик wordpress, то замените строки:

if (in_category( $exx, $k )){
		unset ($tags[ $key ]);}

На

$arc=explode(',',$exx);
foreach($arc as $acr){
	if (in_category( $acr, $k )){
		unset ($tags[ $key ]);}}
  1. Разбиваем перечисленные для исключения рубрики в массив;
  2. Для каждой рубрики (по id) делаем проверку;
  3. Проверяем, принадлежит ли текущий пост этой рубрике, исползуя стандартную функцию;
  4. Если принадлежит, то удаляем тэг из вывода.

Используйте, только в случае крайней необходимости, так как это значительно увеличит время работы скрипта.
Теперь, чтобы убрать тэги постов нескольких рубрик(категорий) wordpress, например с id 45,77 и 21 используйте, код:

<?php wp_tag_cloud('smallest=8&largest=15&number=40','45,77,21');?>






Вопросы и замечания оставляйте в комментариях.


 

Похожие записи


© 2006 - 2024, Александр Сергеев