Шорткоды для вордпресса.

Шорткоды (англ.shortcodes) это короткие коды для вызова функций. Функции могут быть в теме, можно написать самому. Удобство заключается в том, что не надо писать в шаблон кучу строк кода, достаточно кинуть файл functions.php и подключать нужные функции простым вызовом макроса [function].

1. Related Posts

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]

Добавляем контекстную рекламу

на примере адсенса

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]

Добавляем 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"]

Показываем последнее изображение поста

Можно выводить превьюшки на главной.

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 style="width: '.$width.'px; height: '.$height.'px; float: '.$float.';">'.$fullimage.'</div>';
}
add_shortcode("postimage", "sc_postimage");

Вызов:

[postimage]

Отключение встроенного форматирования вордпрессом текста

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]

Отображение статистики блога

Для фанатов мерятся показателями. Устанавливаем вот этот плагин и кучу шорткодов:

[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]

Оригинал статьи + еще некоторые шорткоды здесь

0.00 avg. rating (0% score) - 0 votes

7 комментариев

  • Шорткоды для вордпресса….

    Thank you for submitting this cool story — Trackback from progg.ru…

  • надо сделать один сайт на вордпрессе, а то слишком много людей его хвалят. а может слишком много людей мало знают про другие платформы?

  • Если делать блог на с видео на английском могут пригодится шорткоды для вставки с популярных видео хостингов:

    [blip.tv] — выводит видео с Blip.tv
    [dailymotion] — видео с Dailymotion.com
    [googlevideo] — соответственно с Google Video
    [kyte.tv ] — сервис Kyte.Tv
    [vimeo] — тоже норм сервис
    [youtube] — и конечно дядя YouTube

  • Спасибо за «шорты» сайт хоть полегче будет грузится

  • Недавно знакомому рекламу Гугл ставили, вроде похожим методом. А вообще конечно удобно, но нужно помнить, что слишком много плагинов тормозят работу движка. Главное не переборщить.

  • Сколько плагинов оптимально можно оставить на ВордПрессовском движке, чтобы не тормозил?

    • chem men’she — tem luchse 😉

css.php