В этой статье дорогие друзья, я бы хотел рассказать об использовании шорткодов (shortcode) в WordPress. Это, что-то наподобие плагинов, но использование шорткодов, в отличие от плагинов, значительно снижает нагрузку на Ваш сервер. Также мы рассмотрим самые популярные шорткоды, которые Вы можете использовать у себя на WordPress сайтах. Итак, начнем.
Что такое вообще шорткод?
WordPress, начиная с версии 2.5 начала поддерживать такую функцию как шорткод. Шорткод представляет из себя специализированное кодов слово, которое обычно заключается в квадратные скобки, написав которое в редакторе своего поста, вызывается функция, которая соответствует данному шорткоду. Данная функция естественно, что-то выполняет, например, выводит статистику блога. Соответственно, если Вы напишите шорткод, то в том месте, где Вы его написали, при загрузке данной страницы появится статистика Вашего сайта. Один из стандартных шорткодов – это gallery.Данный шорткод, выводит галерею изображений, которую вы загрузили в конкретный пост.
Как используются шорткоды?
Многие шорткоды необходимо добавлять вручную. Они описываются в файле шаблона functions.php. Но лучше уже добавлять их вручную, чем скачивать и устанавливать плагин, который выполнит туже самую функцию. Давайте рассмотрим самый просто пример шорткода, который выводит текущий год.
Для этих целей, нам необходимо открыть файл functions.php и, например, в конце данного файла написать следующий код:
function show_current_year(){
return ('Y');
}
add_shortcode('show_current_year', 'show_current_year');А теперь, для того, чтобы нам получить текущий год, необходимо в нужное нам место (где мы хотим видеть текущий год) написать следующий шорткод – [show_current_year]
Если Вы хотите, использовать шорткоды, например в виджетах, то в файле functons.php необходимо добавить следующее:
add_filter('widget_text', 'do_shortcode');Если хотите, чтобы шорткоды использовались в анонсах, то допишите следующий код в functions.php:
add_filter('the_excerpt', 'do_shortcode');Для написание не сложно шорткода, достаточно небольшие знания php и всего-то. Дальше рассмотрим топ самых интересных шорткодов, которые Вы можете использовать у себя не сайте, при этом не пользоваться виджетами.
Отображение текста только в RSS.
Если Вы хотите, чтобы у Вас было больше подписчиков, то необходимо часть записи выводить только в RSS ленте. Это можно сделать с помощью плагина FeedOnly, но лучше использовать следующий шорткод:
function feedonly_shortcode( $atts, $content = null) {
if (!is_feed()) return "";
return $content;
}
add_shortcode('feedonly', 'feedonly_shortcode');Для использования необходимо, в нужном месте необходимо написать: [feedonly]необходимый текст для подписчиков[/feedonly]
Показ части поста только для зарегистрированных пользователей.
Это тоже самое, что мы рассматривали выше, только в данном случае текст будет видено только для зарегистрированных пользователей.
function member_check_shortcode( $atts, $content = null ) {
if ( is_user_logged_in() && !( $content ) && !is_feed() )
return $content;
return '';
}
add_shortcode( 'member', 'member_check_shortcode' );Применение: [member]текст для зарегистрированных пользователей[/member]
Скрытие некоторой заметки к посту.
Тут я немного объясню. Например, Вы ведете блог не один, и хотите, чтобы некоторые записки были видны только пользователям, которые имеют доступ к редактированию данного поста (Например: Вы опубликовали пост и поместили такое текст в шорткод, который я напишу ниже – «Не забудь добавить ссылку»). Для этих целей, необходимо использоватб следующий шорткод:
function sc_note( $atts, $content = null ) {
if ( current_user_can( 'publish_posts' ) )
return '<div class="note">'.$content.'</div>';
return '';
}
add_shortcode( 'note', 'sc_note' );Использование следующее: [note]текст заметки[/note]. Также можно прописать стили, чтобы данная заметка визуально отличалась: <div class=»note»>
Кодировка электронного адреса.
Данная шорткод поможет закодировать электронный адрес в специальные html-символы, которые я представляю ниже в виде таблицы:
| Символ | Номер | Название | Описание |
| ‘ | ' | ' | апостроф |
| & | & | & | амперсанд |
| < | < | < | левая треугольная скобка |
| > | > | > | правая треугольная скобка |
| « | « | « | треугольные кавычки (левая) |
| » | » | » | треугольные кавычки (правая) |
Полный список HTML-символов, Вы можете посмотреть на
Сам шорткод выглядит следующим образом:
function munge_mail_shortcode( $atts , $content=null ) {
for ($i = 0; $i < ($content); $i++) $encodedmail .= "&#" . ($content[$i]) . ';';
return '<a href="mailto:'.$encodedmail.'">'.$encodedmail.'</a>';
}
add_shortcode('mailto', 'munge_mail_shortcode');Использовать его следует следующим образом: [mailto]mail@gmail.com[/mailto]
Вывод статистики Вашего блога.
Многие блоггеры любят выводить различную статистику своего блога, например, в футере или сайдбаре. Статистика может быть любой, например количество комментариев на блоге, постов, зарегистрированных пользователей и многое другое. Чтобы вывести такую статистику многие пользуются различными плагинами, но я Вам расскажу, как это можно сделать с помощью шорткода, который показан ниже.
add_shortcode('wcs_count', 'wcs_count_shortcode_handler');
function wcs_count_shortcode_handler($atts)
{
// extract parameters
$parms = shortcode_atts((
'type' => 'posts',
'format' => 'true',
'extra' => '1',
), $atts);
$type = ($parms['type']);
$format = ($parms['format']);
$extra = $parms['extra'];
// process t/f options
$b_format = false;
if (($format == 'yes') || ($format == 'y') ||
($format == 'true') || ($format == '1'))
{$b_format = true;}
// exit
return wcs_get_count($type, $b_format, $extra);
}
function wcs_get_count($type='posts', $format='1', $extra='1')
{
// TYPES:
// posts, posts_by_author, pages, tags, categories
// users, ms_users, blogroll, blogroll_categories, commenters
// comments, comments_pending, comments_spam, comments_pingback
// comments_by_user, comments_by_nicename, comments_by_email
// comments_per_post
// $extra is used with:
// posts_by_author, comments_by_user, comments_by_nicename, comments_by_email
// comments_per_post
// init
global $wpdb;
$type = ($type);
$count = 0;
// process
switch($type)
{
case 'posts': // published
$count = wp_count_posts('post');
$count = $count->publish;
// options: publish, future, draft, pending, private, trash, auto-draft, & inherit
break;
case 'posts_by_author': // use $extra for user/author id
case 'posts_by_user':
$query = "SELECT COUNT(*) FROM $wpdb->posts ";
$where = "WHERE post_type='post' AND post_status='publish' AND post_author='$extra'";
$count = $wpdb->get_var($query . $where);
// alternative method is: count_user_posts()
break;
case 'pages': // published
$count = wp_count_posts('page');
$count = $count->publish;
break;
case 'tags':
$count = wp_count_terms('post_tag');
break;
case 'categories':
$count = wp_count_terms('category');
break;
case 'users':
$count = count_users();
$count = $count['total_users'];
break;
case 'ms_users': // multi-site
$count = get_user_count();
break;
case 'blogroll':
$query = "SELECT COUNT(*) FROM $wpdb->links ";
$where = "WHERE link_visible='Y'";
$count = $wpdb->get_var($query . $where);
break;
case 'blogroll_categories':
$count = wp_count_terms('link_category');
break;
case 'commenters':
$query = "SELECT COUNT(DISTINCT comment_author) FROM $wpdb->comments ";
$where = "WHERE comment_approved='1' AND comment_type=''";
$count = $wpdb->get_var($query . $where);
break;
case 'comments':
$query = "SELECT COUNT(*) FROM $wpdb->comments ";
$where = "WHERE comment_approved='1' AND comment_type=''";
$count = $wpdb->get_var($query . $where);
break;
case 'comments_pending':
$query = "SELECT COUNT(*) FROM $wpdb->comments ";
$where = "WHERE comment_approved='0' AND comment_type=''";
$count = $wpdb->get_var($query . $where);
break;
case 'comments_spam':
$query = "SELECT COUNT(*) FROM $wpdb->comments ";
$where = "WHERE comment_approved='spam' AND comment_type=''";
$count = $wpdb->get_var($query . $where);
break;
case 'comments_pingback':
case 'comments_pingbacks':
case 'comments_trackback':
case 'comments_trackbacks':
$query = "SELECT COUNT(*) FROM $wpdb->comments ";
$where = "WHERE comment_approved='1' AND comment_type='pingback'";
$count = $wpdb->get_var($query . $where);
break;
case 'comments_by_user': // use $extra for user_id
$query = "SELECT COUNT(*) FROM $wpdb->comments ";
$where = "WHERE comment_approved='1' AND comment_type='' AND user_id='$extra'";
$count = $wpdb->get_var($query . $where);
break;
case 'comments_by_author': // use $extra for author nicename (case INsensitive)
case 'comments_by_nicename':
$query = "SELECT COUNT(*) FROM $wpdb->comments ";
$where = "WHERE comment_approved='1' AND comment_type='' AND comment_author='$extra'";
$count = $wpdb->get_var($query . $where);
break;
case 'comments_by_email': // use $extra for author email (case INsensitive)
$query = "SELECT COUNT(*) FROM $wpdb->comments ";
$where = "WHERE comment_approved='1' AND comment_type='' AND comment_author_email='$extra'";
$count = $wpdb->get_var($query . $where);
break;
case 'comments_per_post': // $extra is decimal place precision (0 for integer only)
// posts
$posts_count = wp_count_posts('post');
$posts_count = $posts_count->publish;
// comments
$query = "SELECT COUNT(*) FROM $wpdb->comments ";
$where = "WHERE comment_approved='1' AND comment_type=''";
$comment_count = $wpdb->get_var($query . $where);
// average
return ($comment_count / $posts_count, $extra);
default:
$count = 0;
}
// exit
if ($format) {$count = number_format_i18n($count);}
return $count;
/**********************************************************************
Copyright © 2011 Gizmo Digital Fusion (http://wpCodeSnippets.info)
you can redistribute and/or modify this code under the terms of the
GNU GPL v2: http://www.gnu.org/licenses/gpl-2.0.html
**********************************************************************/
}Использовать данный шорткод можно следующим образом: [wcs_count type=»posts»]. Полный список возможностей можно увидеть на
Показать скрытый текст после определенной даты.
Данный шорткод удобно использовать, при поздравлении с каким-нибудь праздником или анонса проведения конкурса. Например, Вы заранее написали поздравление, но хотите, чтобы оно отобразилось только лишь в определенную дату, тогда данный шорткод именно для Вас.
function content_countdown($atts, $content = null){
(shortcode_atts((
'month' => '',
'day' => '',
'year' => ''
), $atts));
$remain = ((( 0,0,0,(int)$month,(int)$day,(int)$year) - ())/86400);
if( $remain > 1 ){
return $daysremain = "<div class=\"event\">Осталось дней до появления - <strong>($remain)</strong></div>";
}else if($remain == 1 ){
return $daysremain = "<div class=\"event\">Остался всего <strong>($remain)</strong> день до появления</div>";
}else{
return $content;
}
}
add_shortcode('cdt', 'content_countdown');Использовать следует так: [cdt month=»01″ day=»01″ year=»2013″] С Новым годом! [/cdt]. До наступления данной даты, будет отображаться счетчик обратного отсчета.
Открыть PDF-документ через GoogleDocs.
Данный шорткод поможет открыть пользователю pdf-документ с Вашего сайта, используя GoogleDocs, это делается путем перенаправления.
function pdflink($attr, $content) {
return '<a class="pdf" href="http://docs.google.com/viewer?url=' . $attr['href'] . '">'.$content.'</a>';
}
add_shortcode('pdf', 'pdflink');Использовать данный шорткод следует так: [pdf href=»http://site.ru/linktoyour/file.pdf»] Читать PDF на GoogleDocs [/pdf].
Вставка видео с YouTube на Ваш сайт.
Для того, чтобы использовать данный шорткод, естественно Вам следует знать ID видео на Youtube.
function youtube($atts) {
(shortcode_atts((
"value" => 'http://',
"width" => '640',
"height" => '390',
"name"=> 'movie',
"allowFullScreen" => 'true',
"allowScriptAccess"=>'always',
"controls"=> '1',
), $atts));
return '<object style="height: '.$height.'px; width: '.$width.'px"><param name="'.$name.'" value="'.$value.'"><param name="allowFullScreen" value="'.$allowFullScreen.'"><param name="allowScriptAccess" value="'.$allowScriptAccess.'"><embed src="'.$value.'" type="application/x-shockwave-flash" allowfullscreen="'.$allowFullScreen.'" allowScriptAccess="'.$allowScriptAccess.'" width="'.$width.'" height="'.$height.'"></object>';
}
add_shortcode("youtube", "youtube");Использование шорткода следующее: [youtube value=»XXXXXX»], где XXXXXX – ID видео на YouTube.
Удаление автоформатирование текста.
Данный шорткод запрещает форматирование текста, которое создается редактором постов WordPress.
function my_formatter($content) {
$new_content = '';
$pattern_full = '{(\[raw\].*?\[/raw\])}is';
$pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
$pieces = ($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($pieces as $piece) {
if (($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]Здесь текст, к которому не будет применено форматирование WordPress [/raw]
Вывод похожих записей.
Конечно данную функцию можно организовать в WordPress с помощью плагина, что в принципе многие и делают, но я хочу сказать Вам, что Вы также можете это сделать и с помощью шорткода, так будет даже лучше, тем более данную функцию Вы можете применить к конкретной статье.
function related_posts_shortcode( $atts ) {
(shortcode_atts((
'limit' => '5',
), $atts));
global $wpdb, $post, $table_prefix;
if ($post->ID) {
$retval = '<ul>';
// Get tags
$tags = wp_get_post_tags($post->ID);
$tagsarray = ();
foreach ($tags as $tag) {
$tagsarray[] = $tag->term_id;
}
$tagslist = (',', $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] пишем и все, в нужном месте естественно.
Также хочу Вам сказать, что если Вы часть используете шорткоды, то Вам лучше в редактор постов WordPress добавить кнопку вызова шорткодов, это делается следующим образом:
add_action('media_buttons','add_sc_select',11);
function add_sc_select(){
global $shortcode_tags;
/* ------------------------------------- */
/* enter names of shortcode to exclude bellow */
/* ------------------------------------- */
$exclude = ("wp_caption", "embed");
echo ' <select id="sc_select"><option>Shortcode</option>';
foreach ($shortcode_tags as $key => $val){
if(!($key,$exclude)){
$shortcodes_list .= '<option value="['.$key.'][/'.$key.']">'.$key.'</option>';
}
}
echo $shortcodes_list;
echo '</select>';
}
add_action('admin_head', 'button_js');
function button_js() {
echo '<script type="text/javascript">
jQuery(document).ready(function(){
jQuery("#sc_select").change(function() {
send_to_editor(jQuery("#sc_select :selected").val());
return false;
});
});
</script>';
}Удачи Вам, пользуйтесь шорткодами, не нагружайте свой сайт и до встречи в новых статьях!
Также советуем почитать на PressDev.RU
Короткая ссылка: http://pressdev.ru/?p=569





Добрый день((
Вставил вот етот код
function member_check_shortcode( $atts, $content = null ) { if ( is_user_logged_in() && !is_null( $content ) && !is_feed() ) return $content; return »; } add_shortcode( ‘member’, ‘member_check_shortcode’ );
Подробнее http://pressdev.ru/ispolzovanie-shortkodov-v-wordpress/
обновил-стал показываться белый екран и всё(((
Что делать?
ps емеил не настоящий…
Вы может вставили данный код с текстом Подробнее?
Вставил вот ето:
function member_check_shortcode( $atts, $content = null ) { if ( is_user_logged_in() && !is_null( $content ) && !is_feed() ) return $content; return »; } add_shortcode( ‘member’, ‘member_check_shortcode’ );
Подробнее http://pressdev.ru/ispolzovanie-shortkodov-v-wordpress/
Появляется ещё ссылка на этот сайт(она выше)
Нууу, так ее надо удалить из кода!!!
Добрый день. А как вывести текст на английском языке, так, чтобы я мог потом локализовать плагин или шаблон? Например такую конструкцию:
php _e(‘Price’, ‘simple_shop’)