Вопрос или проблема
Я пытаюсь отобразить облако тегов в разных частях моего WordPress сайта. Я использую шорткод, но ищу способ отображать только теги из конкретной категории, добавляя ID этой категории прямо в шорткод, например:
[tagscloud cat_id='2']
Я сделал это, но застрял, потому что не знаю, как фильтровать/применять (не уверен в правильном термине) cat_id.
function wp_tags_cloud_shortcode($atts) {
extract(shortcode_atts(array(
'cat_id' => ''
), $atts));
$content = wp_tag_cloud( array(
'echo' => false,
'smallest' => 10,
'largest' => 10,
'unit' => 'px',
'number' => 0,
'format' => 'flat',
'orderby' => 'count' )
);
return $content;
}
add_shortcode( 'tagscloud', 'wp_tags_cloud_shortcode' );
Я новичок в PHP, так что любая помощь будет очень полезной 🙂
Я наконец-то нашел работающие решение:
function tag_cloud_shortcode($atts) {
extract(shortcode_atts(array(
'cat' => ''
), $atts));
$query_args = array( 'cat' => $atts, 'posts_per_page' => -1 );
$custom_query = new WP_Query( $query_args );
if ($custom_query->have_posts()) :
while ($custom_query->have_posts()) : $custom_query->the_post();
$posttags = get_the_tags();
if ($posttags) {
foreach($posttags as $tag) {
$all_tags[] = $tag->term_id;
}
}
endwhile;
endif;
$tags_arr = array_unique($all_tags);
$tags_str = implode(",", $tags_arr);
$args = array(
'echo' => false,
'smallest' => 10,
'largest' => 10,
'unit' => 'px',
'number' => 0,
'format' => 'flat',
'order' => 'count',
'include' => $tags_str
);
return wp_tag_cloud($args);
}
add_shortcode( 'tagscloud', 'tag_cloud_shortcode' );
Теперь я могу использовать этот шорткод с несколькими ID категорий
[tagscloud cat=3,5]
Спасибо статье Джона Яблонски, ответу Нэйта Бирса и code.tutsplus.com
Ответ или решение
Создание облака тегов для определённой категории с использованием шорткода в WordPress может показаться сложной задачей, особенно для начинающих в PHP и разработке под WordPress. Тем не менее, с правильным подходом и пониманием работы WordPress можно создать решение, которое будет доставлять нужные данные в нужном месте. В этом ответе я расскажу, как создать такой шорткод, и объясню все процессы, которые происходят при его использовании.
Теория
WordPress предлагает мощный инструмент для создания шорткодов, который помогает вставлять динамические элементы в контент без необходимости редактирования кода. Шорткод — это простой текстовый маркер, который заменяется на более сложный контент в момент отображения страницы.
Облако тегов — это визуальный способ отображения тегов в виде изменяющегося по размеру текста, где размеры зависят от популярности (частоты использования) каждого тега. В WordPress это обычно осуществляется с помощью функции wp_tag_cloud
.
Проблема состоит в том, чтобы отобразить облако тегов только для постов из определённых категорий. Для этого необходимо сначала получить все посты из указанных категорий, извлечь их теги и затем использовать эти теги для генерации облака.
Пример
Ваш код включает в себя инициализацию шорткода и использование его для вывода облака тегов. Важная часть решения — правильная настройка WP_Query для получения постов и их тегов.
function tag_cloud_shortcode($atts) {
// Извлекаем параметры шорткода
$atts = shortcode_atts(array(
'cat' => ''
), $atts);
// Создаем новый WP_Query для заданных категорий
$query_args = array(
'cat' => explode(',', $atts['cat']),
'posts_per_page' => -1
);
$custom_query = new WP_Query($query_args);
// Собираем теги из всех постов в указанных категориях
$all_tags = array();
if ($custom_query->have_posts()) {
while ($custom_query->have_posts()) {
$custom_query->the_post();
$posttags = get_the_tags();
if ($posttags) {
foreach($posttags as $tag) {
$all_tags[] = $tag->term_id;
}
}
}
}
// Удаляем дубликаты и готовим строку для wp_tag_cloud
$tags_arr = array_unique($all_tags);
$tags_str = implode(",", $tags_arr);
// Параметры для облака тегов
if(!empty($tags_str)){
$args = array(
'include' => $tags_str,
'echo' => false,
'smallest' => 10,
'largest' => 22,
'unit' => 'px',
'number' => 0,
'format' => 'flat',
'order' => 'count'
);
return wp_tag_cloud($args);
} else {
return 'Теги для выбранной категории отсутствуют.';
}
}
add_shortcode('tagscloud', 'tag_cloud_shortcode');
Применение
После внедрения данного кода в файл функций (functions.php
) вашей темы, вы сможете использовать шорткод [tagscloud cat=3,5]
, чтобы отобразить облако тегов для категорий с ID 3 и 5. Это позволит вам гибко контролировать, где и какие теги отображать, предоставляя визуальное разнообразие и полезную информацию для пользователей вашего сайта.
Этот способ позволяет улучшить навигацию на сайте и предоставлять пользователям возможность быстрого доступа к связанному контенту. Облако тегов может быть полезным инструментом в контексте SEO, так как помогает лучше индексировать контент по ключевым словам.
Помните, что, несмотря на кажущуюся простоту, WP_Query — мощный инструмент, который, если используется неправильно, может привести к нагрузке на сервер. Поэтому важно тщательно тестировать код на производительность и корректность отображаемых данных.
Итак, теперь, обладая знаниями и решениями, обсуждёнными выше, вы сможете реализовать и использовать шорткод для генерации облака тегов в вашем WordPress-сайте для определённых категорий, удовлетворяя как свои потребности, так и потребности ваших пользователей.