Самые востребованные хаки цикла WordPress

Цикл является основным процессом в WordPress, поэтому он встречается почти в каждом файле темы. Это PHP-код, используемый платформой для отображения контента.

Тонкая настройка цикла может повысить возможности WordPress-сайта. Рассмотрим 20 хаков, которые вы сможете использовать прямо сейчас, без необходимости устанавливать плагины.

1. Разместить рекламу после первой записи

Размещение рекламы после первой записи может стать хорошим способом увеличения количества кликов, поэтому попробуйте эту простую настройку.

Замените цикл на следующий. Обратите внимание, что вам нужно вставить код рекламного объявления:

<?php if (have_posts()) : ?>
<?php $count = 0; ?>
<?php while (have_posts()) : the_post(); ?>
<?php $count++; ?>
<?php if ($count == 2) : ?>
//Вставьте в эту строку код рекламного объявления
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php else : ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php the_excerpt(); ?>
<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>

2. Показать популярные записи годичной давности

Некоторые из записей, опубликованные год назад, все еще могут быть популярны среди читателей. Чтобы эти записи оставались популярными, вы можете применить следующий хак.

Вставьте приведенный ниже код в файл single.php:

<?php
$current_day = date('j');
$last_year = date('Y')-1;
query_posts('day='.$current_day.'&year='.$last_year);
if (have_posts()):
while (have_posts()) : the_post();
the_title();
the_excerpt();
endwhile;
endif;
?>

3. Вывести в цикле пять последних закрепленных записей

Функция, используемая в WordPress по умолчанию, позволяет закрепить одну запись на первой странице. Рассматриваемый ниже хак выводит сразу пять закрепленных записей.

Многие блогеры хотят вывести популярные записи в прикрепленном блоке, потому что это позволяют отображать их выше других. Если вы хотите создать свою собственную категорию «Выбор редакции», для этого есть хак. Код, приведенный ниже, может быть вставлен в любом месте темы. Вы также можете изменить число в четвертой строке, чтобы выводить меньшее количество закрепленных записей.

<?php
$sticky = get_option('sticky_posts');
rsort( $sticky );
$sticky = array_slice( $sticky, 0, 5);
query_posts( array( 'post__in' => $sticky, 'caller_get_posts' => 1 ) );
if (have_posts()) :
while (have_posts()) : the_post();
the_title();
the_excerpt();
endwhile;
endif;
?>

4. Список записей из определенной категории

Если вам необходимо выделить записи, которые относятся к одной категории (например, справочные статьи), вставьте приведенный ниже код в файл цикла.

<?php foreach((get_the_category()) as $category) {
$thecat = $category->cat_ID . ' ';
query_posts('child_of='.$thecat);
if (have_posts()) : while (have_posts()) : the_post();
//Классический цикл WP
endwhile;endif;
?>

5. Предоставление списка будущих записей

Размещение анонса будущих записей может повысить интерес читателей. Для этого используйте приведенный ниже код.

<?php query_posts('showposts=10&post_status=future'); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2><?php the_title(); ?></h2>
<span class="datetime"><?php the_time('j. F Y'); ?></span></p>
<?php endwhile;
else: ?><p>No future events scheduled.</p>
<?php endif; ?>

6. Получение записей, загруженных в определенные даты

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

<?php
function filter_where($where = '') {
$where .= " AND post_date >= '2012-08-19' AND post_date <= '2012-08-11'";
return $where;
}
add_filter('posts_where', 'filter_where');
query_posts($query_string);
while (have_posts()) :
the_post();
the_content();
endwhile;
?>

7. Отображение цикла изображений

Если ваши записи содержат изображение, приведенный ниже код будет извлекать их для вывода в цикле.

Вставьте следующий код в файл functions.php:

function catch_that_image() {
global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=['"]([^'"]+)['"].*>/i', $post->post_content, $matches);
$first_img = $matches [1] [0];
if(empty($first_img)){ //Determines a default image
$first_img = "/images/default.jpg";
}
return $first_img;
}

8. Автоматически удалять записи, установив дату истечения срока их «жизни»

Хороший способ решения проблемы устаревших записей – это запланировать их автоматическое удаление после установленной даты. Цикл, приведенный ниже, заменяет существующий цикл и делает именно это.

Не забудьте использовать формат mm / dd / yyyy 00:00:00, чтобы установить дату удаления.

<?php
if (have_posts()) :
while (have_posts()) : the_post(); ?>
$expirationtime = get_post_custom_values('expiration');
if (is_array($expirationtime)) {
$expirestring = implode($expirationtime);
}
$secondsbetween = strtotime($expirestring)-time();
if ( $secondsbetween > 0 ) {
// Например…
the_title();
the_excerpt();
}
endwhile;
endif;
?>

9. Отдельные комментарии от трекбэков

Чтобы читателям было удобно следить за обсуждением под постами, следует выделить комментарии и трекбэки.

Все, что вам нужно сделать, это открыть файл comments.php и найти в нем следующий код:

foreach ($comments as $comment) : ?>
// Comments are displayed here
endforeach;
И заменить его новым кодом:
<ul class="commentlist">
<?php //Displays comments only
foreach ($comments as $comment) : ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type == 'comment') { ?>
<li>//Comment code goes here</li>
<?php }
endforeach;
</ul>
<ul>
<?php //Displays trackbacks only
foreach ($comments as $comment) : ?>
<?php $comment_type = get_comment_type(); ?>
<?php if($comment_type != 'comment') { ?>
<li><?php comment_author_link() ?></li>
<?php }
endforeach;
</ul>

10. Показать похожие записи

Отображение похожих записей — хороший способ увеличить количество читателей. Вставьте этот код в файл single.php.

<?php
$backup = $post;  // резервная копия текущего объекта
$tags = wp_get_post_tags($post->ID);
$tagIDs = array();
if ($tags) {
$tagcount = count($tags);
for ($i = 0; $i < $tagcount; $i++) {
$tagIDs[$i] = $tags[$i]->term_id;
}
$args=array(
'tag__in' => $tagIDs,
'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(); ?>
<h3><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<?php endwhile;
} else { ?>
<h2>No related posts found!</h2>
<?php }
}
$post = $backup;  // скопировать
wp_reset_query(); // чтобы опять использовать оригинальный запрос
?>

11. Определение формата отображения записей на главной странице

Большинство WordPress-тем показывают все записи на главной странице одинаковым образом. Но можно изменить это и определить, какие из них должны быть отображены полностью, а для каких достаточно только анонса.

В файле index.php найдите цикл. Замените его следующим кодом:

<?php if (have_posts()) :
while (have_posts()) : the_post();
$customField = get_post_custom_values("full");
if (isset($customField[0])) {
//Пользовательское поле задано, выводим всю запись
the_title();
the_content();
} else {
// Пользовательских полей не задано, выведем анонс
the_title();
the_excerpt();
endwhile;
endif;
?>

12. Показать рекламный контент выше записей на главной странице

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

<div class="content-loop">

13. Отображение на странице всех авторов блога

Вставьте этот код в любом месте цикла, чтобы отобразить список всех авторов.

<ul>
<?php wp_list_authors('exclude_admin=0&optioncount=1&show_fullname=1&hide_empty=1'); ?>
</ul>

14. Использование пользовательского поля для отображения имени гостевого автора

Если вы публикуете блоге записи гостевых авторов, то не создаете для них отдельную страницу. Почему бы просто не отобразить их имя?

Вставьте приведенный ниже код в файл single.php, чтобы сделать это:

<?php $author = get_post_meta($post->ID, "guest-author", true);
if ($author != "") {
echo $author;
} else {
the_author();
} ?>

15. Сделать наличие изображения обязательным требованием для публикаций

Записи с изображениями получают больше просмотров. Откройте файл functions.php, чтобы сделать их наличие обязательным требованием для публикаций.

add_action('save_post', 'wpds_check_thumbnail');
add_action('admin_notices', 'wpds_thumbnail_error');
function wpds_check_thumbnail( $post_id ) {
// переключаемся на любой пользовательский тип записей
if( get_post_type($post_id) != 'post' )
return;
if ( ! has_post_thumbnail( $post_id ) ) {
// устанавливаем временную опцию, чтобы вывести пользователю сообщение в панели администрирования
set_transient( "has_post_thumbnail", "no" );
// отключаем эту функцию, чтобы она не выполнялась через цикл бесконечно
remove_action('save_post', 'wpds_check_thumbnail');
// обновляем запись, как черновик
wp_update_post(array('ID' => $post_id, 'post_status' => 'draft'));
add_action('save_post', 'wpds_check_thumbnail');
} else {
delete_transient( "has_post_thumbnail" );
}
}
function wpds_thumbnail_error() {
// проверяем, задана ли временная опция, и отображаем сообщение об ошибке
if ( get_transient( "has_post_thumbnail" ) == "no" ) {
echo "<div id='message' class='error'><p><strong>You must add a Featured Image before publishing this. Don't panic, your post is saved.</strong></p></div>";
delete_transient( "has_post_thumbnail" );
}
}

16. Перенаправление на определенную страницу после регистрации

Откройте файл functions.php и добавьте в него следующий код.

function __my_registration_redirect(){    return home_url( '/my-page' );}add_filter( 'registration_redirect', '__my_registration_redirect' );

17. Добавление рекламы в запись

Используйте этот код в файле functions.php, чтобы вставить рекламные объявления в любое место записи.

function googleadsense($content){
$adsensecode = 'Your Ad Codes Here';
$pattern = '<!-googlead->';
$content = str_replace($pattern, $adsensecode, $content);
return $content;
}
add_filter('the_content', 'googleadsense');

18. Использование шорткодов для медийных объявлений

Выберите место, где нужно разместить медийное рекламное объявление, и вставьте приведенный ниже код в файл functions.php.

function showads() {
return '
ЗДЕСЬ КОД ОБЪЯВЛЕНИЯ
';
}
add_shortcode('adsense', 'showads');

19. Вывод записей с наибольшим количеством комментариев

Добавьте приведенный ниже код в файл functions.php, чтобы выводить записи с наибольшим количеством комментариев.

function wpb_most_commented_posts() {
ob_start();?>
<ul class="most-commented">
<?php
$query = new
WP_Query('orderby=comment_count&posts_per_page=10');
while($query->have_posts()) : $query->the_post(); ?>
<li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a> <span class="wpb-comment-count"><?php comments_popup_link('No Comments;', '1 Comment', '% Comments'); ?></span></li>
<?php endwhile; ?>
</ul>
<?php// Turn off output buffering
$output = ob_get_clean();
return $output; }
add_shortcode('wpb_most_commented', 'wpb_most_commented_posts');
add_filter('widget_text', 'do_shortcode');

20. Включение поддержки миниатюр записей

Подавляющее большинство WordPress-тем поддерживает миниатюры записей. А если не, то вы можете включить данную функцию, вставив приведенный ниже код в файл functions.php.

add_theme_support( 'post-thumbnails' );

21. Показать последние комментарии

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

<?php
$query = "SELECT * from $wpdb->comments WHERE comment_approved= '1'
ORDER BY comment_date DESC LIMIT 0 ,5";
$comments = $wpdb->get_results($query);
if ($comments) {
echo '<ul>';
foreach ($comments as $comment) {
$url = '<a href="'. get_permalink($comment->comment_post_ID).'#comment-'.$comment->comment_ID .'" title="'.$comment->comment_author .' | '.get_the_title($comment->comment_post_ID).'">';
echo '<li>';
echo '<div class="img">';
echo $url;
echo get_avatar( $comment->comment_author_email, $img_w);
echo '</a></div>';
echo '<div class="txt">Par: ';
echo $url;
echo $comment->comment_author;
echo '</a></div>';
echo '</li>';
}
echo '</ul>';
}
?>

Используйте эти настройки и улучшите функционал своего сайта!

 

Перевод статьи «20+ Most Wanted WordPress Loop Hacks»  был подготовлен дружной командой проекта Сайтостроение от А до Я