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 × четыре =