20 небольших функций для WordPress


Все больше и больше людей используют WordPress для управления контеном на своих сайтах. И всем им, дизайнерам или программистам, приходиться сталкиваться с программированием. Для расширения или изменения тем или добавления функционала к ним, так или иначе приходиться углубляться в тонкости WordPress. Для новичков в сети существует много информации по настройке и установке. Здесь собрано 20 советов, которые могут быть полезными как для начинающих, так и для опытных пользователей системы WordPress. Если у Вас есть также советы коорыми Вы хотели бы поделиться, напишите и они будут добавлен к этому списку.

1. Отображение тэгов (Tags) в выпадающем меню

В папке с вашей темой найдите файл functions.php, и добавьте в него следующий код. Если у Вас нет такого файла то создайте его.

<?php
function dropdown_tag_cloud( $args = '' ) {
	$defaults = array(
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
		'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC',
		'exclude' => '', 'include' => ''
	);
	$args = wp_parse_args( $args, $defaults );

	$tags = get_tags( array_merge($args, array('orderby' => 'count', 'order' => 'DESC')) ); // Always query top tags

	if ( empty($tags) )
		return;

	$return = dropdown_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args
	if ( is_wp_error( $return ) )
		return false;
	else
		echo apply_filters( 'dropdown_tag_cloud', $return, $args );
}

function dropdown_generate_tag_cloud( $tags, $args = '' ) {
	global $wp_rewrite;
	$defaults = array(
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
		'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC'
	);
	$args = wp_parse_args( $args, $defaults );
	extract($args);

	if ( !$tags )
		return;
	$counts = $tag_links = array();
	foreach ( (array) $tags as $tag ) {
		$counts[$tag->name] = $tag->count;
		$tag_links[$tag->name] = get_tag_link( $tag->term_id );
		if ( is_wp_error( $tag_links[$tag->name] ) )
			return $tag_links[$tag->name];
		$tag_ids[$tag->name] = $tag->term_id;
	}

	$min_count = min($counts);
	$spread = max($counts) - $min_count;
	if ( $spread <= 0 )
		$spread = 1;
	$font_spread = $largest - $smallest;
	if ( $font_spread <= 0 )
		$font_spread = 1;
	$font_step = $font_spread / $spread;

	// SQL cannot save you; this is a second (potentially different) sort on a subset of data.
	if ( 'name' == $orderby )
		uksort($counts, 'strnatcasecmp');
	else
		asort($counts);

	if ( 'DESC' == $order )
		$counts = array_reverse( $counts, true );

	$a = array();

	$rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? ' rel="tag"' : '';

	foreach ( $counts as $tag => $count ) {
		$tag_id = $tag_ids[$tag];
		$tag_link = clean_url($tag_links[$tag]);
		$tag = str_replace(' ', '&nbsp;', wp_specialchars( $tag ));
		$a[] = "\t<option value='$tag_link'>$tag ($count)</option>";
	}

	switch ( $format ) :
	case 'array' :
		$return =& $a;
		break;
	case 'list' :
		$return = "<ul class='wp-tag-cloud'>\n\t<li>";
		$return .= join("</li>\n\t<li>", $a);
		$return .= "</li>\n</ul>\n";
		break;
	default :
		$return = join("\n", $a);
		break;
	endswitch;

	return apply_filters( 'dropdown_generate_tag_cloud', $return, $tags, $args );
}
?>

После этого откройте тот файл, который отвечает за то место, где вы хотите вывести этот выпадающий список, и добавьте в него следующий код:

<select name="tag-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
	<option value="#">Tags</option>
	<?php dropdown_tag_cloud('number=0&order=asc'); ?>
</select>

2. Вывод постов, опубликованных между двумя конкретными датами

Перед тем как цикл отображения начнёт выполняться, добавьте следующий код. Изменить даты можно в строке 3.

<?php
function filter_where($where = '') {
$where .= " AND post_date >= '2009-05-01' AND post_date <= '2009-05-15'";
return $where;
}
add_filter('posts_where', 'filter_where');
query_posts($query_string);
?>

3. Вывод постов с назначенными пользовательскими полями и значениями

Используем функцию query_posts() перед циклом вывода постов <?php while (have_posts()) : the_post(); ?>. Назначим постам поле the meta_key со значением meta_value. Приведённый ниже код, например, выводт посты с назначенными полями (custom field) -"review_type" , которые имеют значения "movie".

<?php query_posts('meta_key=review_type&meta_value=movie'); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
...
...

4.Вывод последних Sticky постов

Используем приведённый ниже код перед циклом вывода постов. Код выбирает 5 самых последних sticky постов. Для того, чтобы изменить количество выводимых постов, установите нужное количесство в строке 4.

<?php
	$sticky = get_option('sticky_posts');
	rsort( $sticky );
	$sticky = array_slice( $sticky, 0, 5);
query_posts( array( 'post__in' => $sticky, 'caller_get_posts' => 1 ) );
?>

5.Автоматическая вставка контента в Ваших новостных лентах (Feeds)

В папке с вашей темой найдите файл functions.php, и добавьте в него следующий код. Если у Вас нет такого файла то создайте его. Код будет автоматически вставлять контент после каждого поста в Вашей ленте RSS. Вы можете использовать этот код для вставки рекламы или частных объявлений.

function insertFootNote($content) {
if(!is_feed() && !is_home()) {
$content.= "<h4>Enjoyed this article?</h4>";
$content.= "<p>Subscribe to our <a href='#'>RSS feed</a></p>";
}
return $content;
}
add_filter ('the_content', 'insertFootNote');

6. Вывод самых комментируемых постов

Если вы хотите выводить список самых комментируемых постов в сайд баре (sidebar), просто откройте файл sidebar.php в папке Вышей темы и добавьте в него следующий код в то место, где Вы хотите отображать список.. Вы можете изменить размер спика в строке 3.

<h2>Популярные посты</h2>
<ul>
<?php $result = $wpdb->get_results("SELECT comment_count,ID,post_title FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 5");
foreach ($result as $post) {
setup_postdata($post);
$postid = $post->ID;
$title = $post->post_title;
$commentcount = $post->comment_count;
if ($commentcount != 0) { ?>

<li><a href="<?php echo get_permalink($postid); ?>" title="<?php echo $title ?>">
<?php echo $title ?></a> {<?php echo $commentcount ?>}</li>
<?php } } ?>

</ul>

7. Вывод самых комментируемых постов, например в 2009 году

<h2>Самые комментируемые посты 2009 года</h2>
<ul>
<?php
$result = $wpdb->get_results("SELECT comment_count,ID,post_title, post_date FROM $wpdb->posts WHERE post_date BETWEEN '2009-01-01' AND '2009-12-31' ORDER BY comment_count DESC LIMIT 0 , 10");

foreach ($result as $topten) {
$postid = $topten->ID;
$title = $topten->post_title;
$commentcount = $topten->comment_count;
if ($commentcount != 0) {
?>
<li><a href="<?php echo get_permalink($postid); ?>"><?php echo $title ?></a></li>

<?php }
}
?>
</ul>

8. Вывод похожих постов, используя тэги постов

Этот код отображает похлжие посты используя тэги постов (post tag). Он должен использоваться внутри цикла вывода постов.

<?php
//for use in the loop, list 5 post titles related to first tag on current post
$tags = wp_get_post_tags($post->ID);
if ($tags) {
echo 'Related Posts';
$first_tag = $tags[0]->term_id;
$args=array(
'tag__in' => array($first_tag),
'post__not_in' => array($post->ID),
'showposts'=>5,
'caller_get_posts'=>1
);
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post(); ?>

<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
endwhile;
}
}
?>

9. Вывод числа результатов поиска

В папке Вашей темы, откройте файл search.php, и добавьте в него следующий код.

<h2 class="pagetitle">Рзультаты поиска для <?php /* Search Count */ $allsearch = &new WP_Query("s=$s&showposts=-1"); $key = wp_specialchars($s, 1); $count = $allsearch->post_count; _e(''); _e('<span class="search-terms">'); echo $key; _e('</span>'); _e(' — '); echo $count . ' '; _e('articles'); wp_reset_query(); ?></h2>

10. Отображение номера комментируемой страницы в тэге <Title>

В папаке Вашей темы откройте файл header.php. Добавьте в него следующий код в тэг <title>.

<?php if ( $cpage < 2 ) {}
else { echo (' - comment page '); echo ($cpage);}
?>

11. Отображение будущих постов

Например следующий пост отобразит 10 будущих постов.

<p>Будущие посты</p>
	<?php query_posts('showposts=10&post_status=future'); ?>
	<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

			<p><?php the_title(); ?> <?php the_time('j. F Y'); ?></p>

	<?php endwhile; else: ?>
<p>Нет постов.</p>
<?php endif; ?>

12. Отображение числа слов в посте

В папке Вашей темы откройте файл постов single.php и добавьте в него следующий код

<?php function count_words($str){
$words = 0;
$str = eregi_replace(" +", " ", $str);
$array = explode(" ", $str);
for($i=0;$i < count($array);$i++)
	 {
if (eregi("[0-9A-Za-zÀ-ÖØ-öø-ÿ]", $array[$i]))
$words++;
}
return $words;
}?>

Число слов: <?php echo count_words($post->post_content); ?>

13. Выборка ленты RSS

Для отображения ленты RSS, Вы можете использовать встроенный парсер RSS. Чтобы сделать это, включите файл rss.php, а затем используйте функцию wp_rss().

<?php include_once(ABSPATH.WPINC.'/rss.php');
wp_rss('http://feeds2.feedburner.com/WebDesignerWall', 5); ?>

14. Подсветка фразы поиска в результатах поиска

Откройте файл search.php file и найдите функцию the_title(). Замените это на следующее:

echo $title;

Теперь перед этой строчкой вставьте следующий код:

<?php
	$title 	= get_the_title();
	$keys= explode(" ",$s);
	$title = preg_replace('/('.implode('|', $keys) .')/iu',
		'<strong class="search-excerpt">\0</strong>',
		$title);
?>

Затем откройте файл стилей style.css и добавьте стиль с нужным цветом

strong.search-excerpt { background: yellow; }

15. Вывод сообщения для специфичной даты

Следующий код выводит сообщение на рождество

<?php
if ((date('m') == 12) && (date('d') == 25)) { ?>
<h2>Merry Christmas!</h2>
<?php } ?>

16. Автоматическое создание TinyURL для каждого поста

В папке с вашей темой найдите файл functions.php, и добавьте в него следующий код. Если у Вас нет такого файла то создайте его.

function getTinyUrl($url) {
$tinyurl = file_get_contents("http://tinyurl.com/api-create.php?url=".$url);
return $tinyurl;
}

17. Исключение категорий из результатов поиска

Откройте файл search.php и добавьте следующий код перед циклом вывода. Код исключит категории с ID 1, 2, 3 из результатов поиска.

<?php if( is_search() ) :
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("s=$s&paged=$paged&cat=-1,-2,-3");
endif; ?>

//the Loop here...

18. Исключение категорий из RSS

В папке с Вашей темой найдите файл functions.php, и добавьте в него следующий код. Если у Вас нет такого файла то создайте его.

<?php function myFilter($query) {
if ($query->is_feed) {
$query->set('cat','-5'); //Не забудьте изменить ID категории
}
return $query;
}

add_filter('pre_get_posts','myFilter');
?>

19. Отображение числа твиттер последователей

Добавьте следующий код в то место, где Вы хотите выводить эту информацию. Замените "YourUserID" на Ваш твиттер аккаунт.

<?php function string_getInsertedString($long_string,$short_string,$is_html=false){
if($short_string>=strlen($long_string))return false;
$insertion_length=strlen($long_string)-strlen($short_string);
for($i=0;$i<strlen($short_string);++$i){
if($long_string[$i]!=$short_string[$i])break;
}
$inserted_string=substr($long_string,$i,$insertion_length);
if($is_html && $inserted_string[$insertion_length-1]=='<'){
$inserted_string='<'.substr($inserted_string,0,$insertion_length-1);
}
return $inserted_string;
}

function DOMElement_getOuterHTML($document,$element){
$html=$document->saveHTML();
$element->parentNode->removeChild($element);
$html2=$document->saveHTML();
return string_getInsertedString($html,$html2,true);
}

function getFollowers($username){
$x = file_get_contents("http://twitter.com/".$username);
$doc = new DomDocument;
@$doc->loadHTML($x);
$ele = $doc->getElementById('follower_count');
$innerHTML=preg_replace('/^<[^>]*>(.*)<[^>]*>$/',"\\1",DOMElement_getOuterHTML($doc,$ele));
return $innerHTML;
}
?>

<?php echo getFollowers("YourUserID")." followers"; ?>

20. Отображение числа подписчиков FeedBurner в тексте

<?php
	$fburl="https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=feed-id";
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_URL, $fburl);
	$stored = curl_exec($ch);
	curl_close($ch);
	$grid = new SimpleXMLElement($stored);
	$rsscount = $grid->feed->entry['circulation'];
	echo $rsscount;
?>
Реклама
Поделиться
Качественные премиум темы и шаблоны для Вашего сайта:

Смотреть полный каталог качественных тем и шаблонов

Здесь Вы можете выбрать из более чем 46 000 готовых дизайнов. Шаблоны сайтов + установка + хостинг + персонализация + поисковая оптимизация + копирайтинг — все эти услуги вы всегда можете получить от профессионалов мирового уровня!

2 комментария

  1. Nur_kz13/06/2012
  2. Andrey25/03/2011

Добавить коментарий

5 × 2 =