Если вы давно ведете свой блог на WordPress, то конечно же знаете, что визуальный редактор позволяет применять к введенному тексту любое форматирование, используя различные тэги. А что если вам требуется вставить небольшой фрагмент php-кода в текст статьи? Именно для таких случаев и были придуманы шорткоды.
Представленные еще в версии WordPress 2.5, шоркоды (shortcodes) являются самым легким способом отображения множества вещей, в записях вашего блога, с помощью вставки очень простого фрагмента кода. И в сегодняшей статье, вы узнаете наиболее полезные из них.
Как работают шорткоды
Существует множество отличных статей о шорткодов WordPress. Если вы раньше не сталкивались с ними, можете почитать следующие статьи (английский язык):
Что касается этой статьи, код, приведенный в примерах, нужно просто вставить в файл functions.php. После этого, шорткоды можно будет использовать в тексте, как показано в секции «Использование».
1. Вывод похожих записей
Схожие по тематике записи – это отличный способ задержать подольше читателей блога. Конечно, существует масса плагинов для их отображения, но как насчет простого шорткода?
function related_posts_shortcode( $atts ) { extract(shortcode_atts(array( 'limit' => '5', ), $atts)); global $wpdb, $post, $table_prefix; if ($post->ID) { $retval = '<ul>'; // Get tags $tags = wp_get_post_tags($post->ID); $tagsarray = array(); foreach ($tags as $tag) { $tagsarray[] = $tag->term_id; } $tagslist = implode(',', $tagsarray); // Do the query $q = "SELECT p.*, count(tr.object_id) as count FROM $wpdb->term_taxonomy AS tt, $wpdb->term_relationships AS tr, $wpdb->posts AS p WHERE tt.taxonomy ='post_tag' AND tt.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id = p.ID AND tt.term_id IN ($tagslist) AND p.ID != $post->ID AND p.post_status = 'publish' AND p.post_date_gmt < NOW() GROUP BY tr.object_id ORDER BY count DESC, p.post_date_gmt DESC LIMIT $limit;"; $related = $wpdb->get_results($q); if ( $related ) { foreach($related as $r) { $retval .= '<li><a title="'.wptexturize($r->post_title).'" href="'.get_permalink($r->ID).'">'.wptexturize($r->post_title).'</a></li>'; } } else { $retval .= ' <li>No related posts found</li>'; } $retval .= '</ul>'; return $retval; } return; } add_shortcode('related_posts', 'related_posts_shortcode');
Использование
[related_posts]
2. Отображение Google Chart
Google Charts API, вероятно, самый простой способ создать динамические диаграммы онлайн. Смотрите, как можно сделать шорткод, который облегчит процесс внедрения диаграмм в вашем WordPress-блоге.
function chart_shortcode( $atts ) { extract(shortcode_atts(array( 'data' => '', 'colors' => '', 'size' => '400x200', 'bg' => 'ffffff', 'title' => '', 'labels' => '', 'advanced' => '', 'type' => 'pie' ), $atts)); switch ($type) { case 'line' : $charttype = 'lc'; break; case 'xyline' : $charttype = 'lxy'; break; case 'sparkline' : $charttype = 'ls'; break; case 'meter' : $charttype = 'gom'; break; case 'scatter' : $charttype = 's'; break; case 'venn' : $charttype = 'v'; break; case 'pie' : $charttype = 'p3'; break; case 'pie2d' : $charttype = 'p'; break; default : $charttype = $type; break; } if ($title) $string .= '&chtt='.$title.''; if ($labels) $string .= '&chl='.$labels.''; if ($colors) $string .= '&chco='.$colors.''; $string .= '&chs='.$size.''; $string .= '&chd=t:'.$data.''; $string .= '&chf='.$bg.''; return '<img title="'.$title.'" src="http://chart.apis.google.com/chart?cht='.$charttype.''.$string.$advanced.'" alt="'.$title.'" />'; } add_shortcode('chart', 'chart_shortcode');
Использование
[chart data="41.52,37.79,20.67,0.03" bg="F7F9FA" labels="Reffering+sites|Search+Engines|Direct+traffic|Other" colors="058DC7,50B432,ED561B,EDEF00" size="488x200" title="Traffic Sources" type="pie"]
3. Интеграция Adsense ads
Adsense – это самый лучший способ заработать деньги онлайн, и большинство блогеров используют его в целях получения дохода. С помощью виджетов, вы легко сможете добавить Adsense ads в сайдбар вашего блога, но вы сможете получить большее количество кликов от пользователей, если внедрите Adsense в свои записи. Эта задача довольно простая, благодаря шорткодам WordPress.
function showads() { return '<script type="text/javascript"><!-- google_ad_client = "pub-3637220125174754"; google_ad_slot = "4668915978"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> '; } add_shortcode('adsense', 'showads');
Использование
[adsense]
4. Отображение контента только для читателей блога с помощью шорткода WordPress
По прошествии пары месяцев, все больше и больше блогов, создают раздел только для зарегистрированных пользователей. Знаете ли вы насколько легко создать закрытый контент в своем блоге, используя шорткод?
function access_check_shortcode( $attr, $content = null ) { extract( shortcode_atts( array( 'capability' => 'read' ), $attr ) ); if ( current_user_can( $capability ) && !is_null( $content ) && !is_feed() ) return $content; return 'Sorry, only registered members can see this text.'; } add_shortcode( 'access', 'access_check_shortcode' );
Использование
[access capability="switch_themes"]
5. Встроенный RSS-ридер
Другая, замечательная вещь в WordPress – это встроенный RSS-ридер, который используется для отображения фидов в вашей панели управления. Вы можете использовать его в сайдбаре блога (или в заголовке, подвале и т.д.), но с шорткодом, вы можете встроить его в свои записи.
//This file is needed to be able to use the wp_rss() function. include_once(ABSPATH.WPINC.'/rss.php'); function readRss($atts) { extract(shortcode_atts(array( "feed" => 'http://', "num" => '1', ), $atts)); return wp_rss($feed, $num); } add_shortcode('rss', 'readRss');
Использование
[rss feed="http://feeds2.feedburner.com/Catswhocode" num="5"]
6. Автоматическое создание короткого url для Твиттера
Если у вас есть аккаунт на Твиттере, вы знаете, насколько удобны короткие url. Но когда вы хотите разместить ссылку на свою статью в Твиттере, вы часто пренебрегаете возможностью создания короткого url. А как насчет того, чтобы использовать шорткод, для облегчения жизни вашим читателям?
function subzane_shorturl($atts) { extract(shortcode_atts(array( 'url' => '', 'name' => '', ), $atts)); $request = 'http://u.nu/unu-api-simple?url=' . urlencode($url); $short_url = file_get_contents($request); if (substr($short_url, 0, 4) == 'http') { $name = empty($name)?$short_url:$name; return '<a href="'.$short_url.'">'.$name.'</a>'; } else { $name = empty($name)?$url:$name; return '<a href="'.$url.'">'.$name.'</a>'; } } add_shortcode('shorturl', 'subzane_shorturl');
Использование
[shorturl name="shortcode" url="http://codex.wordpress.org/Shortcode_API"]
7. Отображение последней картинки, прикрепленной к записи
Вместо того, чтобы использовать url картинки, воспользуйтесь простым шорткодом, который может отобразить последнее изображение, прикрепленное к записи:
function sc_postimage($atts, $content = null) { extract(shortcode_atts(array( "size" => 'thumbnail', "float" => 'none' ), $atts)); $images =& get_children( 'post_type=attachment&post_mime_type=image&post_parent=' . get_the_id() ); foreach( $images as $imageID => $imagePost ) $fullimage = wp_get_attachment_image($imageID, $size, false); $imagedata = wp_get_attachment_image_src($imageID, $size, false); $width = ($imagedata[1]+2); $height = ($imagedata[2]+2); return '<div class="postimage" style="width: '.$width.'px; height: '.$height.'px; float: '.$float.';">'.$fullimage.'</div>'; } add_shortcode("postimage", "sc_postimage");
Использование
[postimage]
8. Добавление заметок администратора к записям
Если вы владелец блога с множеством авторов, возможно вам понадобится возможность оставлять сообщения к записям, которые будут видны только другим администраторам. Например, владелец блога, может добавить сообщение к записи, в котором просит автора статьи исправить ошибку, или добавить больше информации.
add_shortcode( 'note', 'sc_note' ); function sc_note( $atts, $content = null ) { if ( current_user_can( 'publish_posts' ) ) return '<div class="note">'.$content.'</div>'; return ''; }
Использование
[note]This is a personal note that only admins can see![/note]
9. Удаление автоматического форматирования WordPress
Если вы пользуетесь сниппетами для отображения кода в блоге, вам должно быть известно, что автоматическое форматирование WordPress, может принести дополнительную головную боль для разработчиков. Решение простое: используйте шорткод для удаления функции автоматического форматирования, для некоторых участков текста.
function my_formatter($content) { $new_content = ''; $pattern_full = '{(\[raw\].*?\[/raw\])}is'; $pattern_contents = '{\[raw\](.*?)\[/raw\]}is'; $pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE); foreach ($pieces as $piece) { if (preg_match($pattern_contents, $piece, $matches)) { $new_content .= $matches[1]; } else { $new_content .= wptexturize(wpautop($piece)); } } return $new_content; } remove_filter('the_content', 'wpautop'); remove_filter('the_content', 'wptexturize'); add_filter('the_content', 'my_formatter', 99);
Использование
[raw]This portion of text will not be automatically formatted by WP.[/raw]
10. Отображение статистики вашего блога с помощью шорткодов
Вы когда-нибудь хотели отобразить статистику собственного блога, в реальном времени? Спасибо Wesley и его плагину «Blog Stats», с его помощью вы сможете отображать такие статистические данные как: количество записей, количество комментариев, среднее количество комментариев к записям, google pagerank и т.д., используя шорткоды.
Плагин Blog Stats можно скачать отсюда, устанавливается он точно также, как и обычные плагины.
Использование
[pagerank] [feedburner_subscribers] [alexa_rank] [technorati_authority] [technorati_rank] [user_count] [post_count] [page_count] [comment_count] [trackback_count] [avg_comments_per_post] [category_count] [tag_count] [link_count] [google_backlinks] [yahoo_backlinks] [delicious_bookmarks]
Перевод статьи «10 incredibly cool WordPress shortcodes«, автор Jean-Baptiste Jung
Но ведь все это реализовано в плагинах. Разве не проще их установить и включить? :)
Возможно кому-то это действительно будет проще. Шорткоды — это альтернативный способ добавления различной фукнциональности именно в текст записи. Кто знает, может вы сможете в дальнейшем создать свой шорткод, аналога которому не будет среди плагинов :)
Скорее всего и такой шорткод кто-то реализует в виде плагина. Все-таки большинство пользователей не программисты, а управляться с плагинами проще.
С другой стороны, шорткоды имеют большую гибкость, ибо их можно быстрее и проще отредактировать и привести к нужному виду.
Совершенно верно, к тому же не забывайте про разработчиков, шорткоды, конечно, в первую очередь будут интересны им
Спасибо) Очень классная статья)
т.е. по существу это пользовательские функции, расширяющие функционал
А существуют ли коллекции шорт-кодов?
Насчет коллекций не знаю, мне не попадались. Попробуйте создать свою ;)
Интересный способ. не знала, что такой существует.
Спасибо, возьму на вооружение.
Спасибо, интересная подборка.
А может быть вы в курсе как в WordPress не используя плагин Recent Comments можно вывести последние комментарии. Хочется как-то побороть прожорливость памяти на своем блоге…
А в чем отличие от функций?
Шорткоды — это те же функции, отличие в том, что их можно вызывать в визуальном редакторе
Установил плагин Category Post List и шорткод к нему на странице http://skachatprogrammy.ru/skachat-programmy-dlya-kompyutera-na-russkom-yazyke-besplatno, где хотел бы вывести содержимое — шоркод отображается как текст и ничего не выводится. Что делать?
А как с помощью шорткода вывести какой-нибудь простой контент?