Полезные вставки (фрагменты) кода для WordPress

Здравствуйте, уважаемые читатели XoZbloga! Я уже упоминал о важности того, чтобы иметь под рукой качественную подборку полезных фрагментов (вставок) кода. Однако рассматривались вставки кода для сайтов на PHP. Сегодняшний пост будет посвящен фрагментам кода, с помощью которых можно расширить или усовершенствовать работу сайта на движке WordPress. Подборка состоит из 10 фрагментов кода. Приступаем:

Постраничная навигация без плагина

По-умолчание в WordPress, на мой взгляд, не очень удобная навигация по страницам. С помощью этого фрагмента создается «классическая» навигация по страницам, как при использовании плагина WP-PageNavi, т.е. вместо двух кнопок «старые записи» и «новые записи», создаются ссылки на страницы и кнопочки «вправо» и «влево». Зачем перегружать сайт использую плагин, когда можно добиться подобного результата, используя небольшое усовершенствование. Добавьте следующие строки кода в файл темы functions.php:

<? function pagination($prev = '«', $next = '»') { global $wp_query, $wp_rewrite; $wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;
$pagination = array(
'base' => @add_query_arg('paged','%#%'),
'format' => '',
'total' => $wp_query->max_num_pages,
'current' => $current,
'prev_text' => __($prev),
'next_text' => __($next),
'type' => 'plain'
);
if( $wp_rewrite->using_permalinks() )
$pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' );

if( !empty($wp_query->query_vars['s']) )
$pagination['add_args'] = array( 's' => get_query_var( 's' ) );

echo paginate_links( $pagination );
}; ?>

Затем необходимо добавить в файлы (обычно это index.php, arhive.php, search.php и др.) после цикла вывода записей (цикл заканчивается endwhile;), следующий код:

<? pagination('<<', '>>'); ?>

Старый код навигации нужно либо за комментировать, либо удалить. В стандартной теме Twentyeleven он выглядит так (twentyeleven_content_nav( ‘nav-below’ );).
Вы также можете использовать следующие CSS стили для настройки внешнего вида:

.page-numbers { font-size: 15px; }
.page-numbers.current { color: #222; }
.page-numbers .dots { letter-spacing: 1px }
a.page-numbers  { font-size: 14px; color: #3888ff; }

Список всех категорий с записями

Отличный фрагмент кода, с помощью которого можно организовать вывод списка всех категорий + входящих в эти категории записи (статьи) в виде ссылок. Можно сказать что это своеобразная карта сайта. Выстраивается список следующего вида:

  • Категория 1
    • Запись 1
    • Запись 2
    • Запись 3
  • Категория 2
    • Запись 1
    • Запись 2
    • Запись 3
  • Категория 3
    • Запись 1
    • Запись 2
    • Запись 3

Вставьте следующий код в любое удобное Вам место:

<?php
//Для каждой категории, показать все записи
$cat_args=array(
  'orderby' => 'name',
  'order' => 'ASC'
   );
$categories=get_categories($cat_args);
  foreach($categories as $category) {
    $args=array(
      'showposts' => -1,
      'category__in' => array($category->term_id),
      'caller_get_posts'=>1
    );
    $posts=get_posts($args);
      if ($posts) {
        echo '<p>Категория: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Смотреть все записи в %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </p> ';
        foreach($posts as $post) {
          setup_postdata($post); ?>
          <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Перейти в <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
          <?php
        }
      }
    }
?>

Шорткод (Shortcode) количество комментариев

Используйте этот короткий код (shortcode), чтобы отобразить количество комментариев конкретной записи. Все, что вам нужно сделать, это передать как параметр ID записи. Количество комментариев в записи, будут в виде ссылки на эти самые комментарии. Добавьте следующий код в файл function.php Вашей темы:

<?php
function comments_shortcode($atts) {
   extract( shortcode_atts( array(
      'id' => ''
   ), $atts ) );

   $num = 0;
   $post_id = $id;
   $queried_post = get_post($post_id);
   $cc = $queried_post->comment_count;
      if( $cc == $num || $cc > 1 ) : $cc = $cc.' Comments';
      else : $cc = $cc.' Комментариев';
      endif;
   $permalink = get_permalink($post_id);

   return '<a href="'. $permalink . '" class="comments_link">' . $cc . '</a>';

}
add_shortcode('comments', 'comments_shortcode');
?>

Вот пример использования этого шорткода, где id это id-записи:

[comments id="1"]

Облако тегов

Функция облако тегов может быть использована где угодно в теме: боковая панель, подвал и тд. Она просто возвращает простые ссылки, которые могут быть оформлены с помощью CSS стилей.

<?php wp_tag_cloud(array(
  'smallest' => 10,      // размер шрифта самого маленького тега
  'largest' => 18,       // размер шрифта самого большого тега
  'unit' => 'px',        // измерение в пикселях
  'orderby' => 'name',   // алфавитный
  'order' => 'ASC',      // начинать с A
  'exclude' => 6         // ID тегов чтобы исключить их из списка
)); ?>

Динамический копирайт текст

Этот фрагмент позволяет создавать простой текст авторского права в подвале. Дата устанавливается автоматически, используется функция the_date().
Просто скопируйте фрагмент в свой footer.php:

<b>(c) <?php echo date('Y'); ?></b>
| <a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a>
| <?php bloginfo('description'); ?>

Информация о пользователе

WordPress позволяет пользователям добавлять информацию о себе в своем профиле в WP Admin. Для отображения информации пользователей, Вы можете использовать этот фрагмент:

<?php
global $current_user;
get_currentuserinfo();
$user_id = $current_user->ID; // Вы можете установить ID любого пользователя, здесь ID текущего пользователя.
$user_twitter = get_user_meta( $user_id, 'twitter', true);
echo $user_twitter;
?>

Более подробно о функции get_currentuserinfo(); можно узнать ТУТ.

Добавить кнопку Google +1

Достаточно долго искал пути решения этой проблемы, ставил разные плагины, коды. Но ничего лучше чем просто вставить вот этот код в файл single.php, так и не нашел.

<g:plusone size="medium"></g:plusone>

Для работы кнопочки необходимо подключиться к google, добавляем следующую строку в файл header.php:

<script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>

PHP код в тексте

Бывает при написании статьи нужно вставить код PHP, но если его просто вставить то он не отобразиться. Чтобы этого избежать используем следующий фрагмент, его необходимо добавить в файл function.php темы:

<?php
function bbcode( $attr, $content = null ) {
        $content = clean_pre($content); // Очистите предварительно теги
        return '< pre">< code>' .
                str_replace('<', '&lt', $content) . // Заменить символ <
                '< /code>< /pre>';
    }
add_shortcode('code', 'bbcode'); ?>

Не забудьте убрать пробелы в тегах!
А работает это следующим образом, в месте где необходимо вставить PHP код, выделяем его вот так:

[ code]<?php echo "Hello"; ?>[ /code]

ВНИМАНИЕ! Я добавил 2 лишних пробела чтобы показать как это работает, но при использовании их надо убрать! Первый пробел после первой квадратной скобки, второй пробел после третьей квадратной скобки.

Исключить записи с главной страницы

Чтобы исключить все записи какой-либо категории с главной страницы, Вы можете использовать этот фрагмент, а добавить его нужно в файл function.php Вашей темы:

<?php
function excludeCat($query) {
  if ( $query->is_home ) {
    $query->set('cat', '-3,-5,-23');
  }
  return $query;
}
add_filter('pre_get_posts', 'excludeCat');
?>

Где 3,5 и 23 это ID категорий.

«Хлебные крошки» без плагина

Ну и на закуску, вот фрагмент кода с помощью которого на блоге можно организовать так называемые «хлебные крошки», это дополнительный элемент навигации, когда отображается путь в виде ссылок на страницы выше рангом на страницу категории и главную. Примерно вот так (Главная->Категория 1->Название статьи). Данный фрагмент кода необходимо вставить в файл function.php Вашей темы:

<?php
function the_breadcrumb() {
      echo '<ul id="crumbs">';
   if (!is_home()) {
      echo '<li><a href="';
      echo get_option('home');
      echo '">';
      echo 'Главная';
      echo "</a></li>";
      if (is_category() || is_single()) {
         echo '<li>';
         the_category(' </li><li> ');
         if (is_single()) {
            echo "</li><li>";
            the_title();
            echo '</li>';
         }
      } elseif (is_page()) {
         echo '<li>';
         echo the_title();
         echo '</li>';
      }
   }
   elseif (is_tag()) {single_tag_title();}
   elseif (is_day()) {echo"<li>Архив за "; the_time('F jS, Y'); echo'</li>';}
   elseif (is_month()) {echo"<li>Архив за "; the_time('F, Y'); echo'</li>';}
   elseif (is_year()) {echo"<li>Архив за "; the_time('Y'); echo'</li>';}
   elseif (is_author()) {echo"<li>Архив автора "; echo'</li>';}
   elseif (isset($_GET['paged']) && !empty($_GET['paged'])) {echo "<li>Архив"; echo'</li>';}
   elseif (is_search()) {echo"<li>Результат поиска"; echo'</li>';}
   echo '</ul>';
}
?>

Что использовать эти «хлебные крошки», добавляем в файлы (archive.php, category.php, page.php, single.php, search.php) следующую функцию:

<?php the_breadcrumb(); ?>

Внешний вид «хлебных крошек» оставляет желать лучшего) Поэтому Вам придется поработать над стилями!

На этом все =)

Чтобы оставаться в курсе свежих статей и уроков подписывайтесь на страницу ВКонтакте или следите за мной в Twitter. Не забывайте оставлять комментарии к статьям и урокам. Если статья Вам понравилась сделайте tweet или like — тем самым Вы выразите свою благодарность. Спасибо за прочтение, до связи!

P.S.: DataDen в курсе всех тем.Блоги,публикации,новости.

Чтобы оставаться в курсе свежих статей и уроков подписывайтесь на еженедельную почтовую рассылку или на новостную ленту RSS. Спасибо!