11 декабря 2009 г.

Для этого в тех файлах шаблона, где необходимо отобразить записи, опубликованные между двумя конкретными датами, находим начало цикла:

<?php if (have_posts()) : ?>
	<?php while (have_posts()) : the_post(); ?>

и добавляем перед ним следующий код:

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

Даты в двух местах, естественно, нужно заменить на нужные. Формат даты: год-месяц-день. 1-я дата – начала диапазона, 2-я – конец диапазона.

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

Реализуется это следующим образом. В файл functions.php вставляем следующий код:

add_shortcode('member', 'member_check_shortcode');

function member_check_shortcode( $atts, $content = null ) {
	if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
		return $content;
		return '';
}

После этого в тексте статьи используем следующую конструкцию:

[member]
Это текст, который будет показан только зарегистрированным пользователям.
[/member]

Обновление 06.05.10

Теперь рассмотрим обратную ситуацию – когда нужно показывать текст только незарегистрированным пользователям.

В файл functions.php добавляем следующую функцию:

add_shortcode('guest', 'guest_check_shortcode');

function guest_check_shortcode( $atts, $content = null ) {
	if ( !is_user_logged_in() && !is_null( $content ) && !is_feed() )
		return $content;
		return '';
}

И в тексте статьи используем такую конструкцию:

[guest]
Это текст, который будет показан только незарегистрированным пользователям.
[/guest]

—–
В специализированном интернет-магазине можно купить конструктор “Лего”. В каталоге представлен большой ассортимент детских игрушек LEGO. Действует дисконтная система.

1 декабря 2009 г.

Я уже не раз сталкивался с ситуацией, когда, согласно дизайну, необходимо было в шаблоне WordPress разместить ссылку “Читать далее” в особом месте, а не там, где она выводится по умолчанию. Например, нужно ее оформить вот так:

read-more

Плюс к этому необходимо было сделать так, чтобы, если в текст статьи не вставлен тег <!--more-->, то ссылку “Читать далее” не выводить.

Подобные 2 задачи реализуются следующим образом.

Во-первых, в то место шаблона WordPress, где будет отображаться наша особая ссылка “Читать далее”, необходимо вставить следующий код:

<?php if ($pos=strpos($post->post_content, '<!--more-->')) { ?><a href="<?php the_permalink() ?>" class="more">Читать далее</a><?php } ?>

Этим кодом мы проверяем, использовался ли тег <!--more-->, и, если да, то выводим ссылку.

Во-вторых, осталось удалить ссылку “Читать далее”, которую WordPress выводит по умолчанию. Для этого достаточно в файл functions.php поместить следующую функцию:

function remove_more_link() { return ''; }
add_filter('the_content_more_link', 'remove_more_link');

Однако стоит иметь в виду, что данная функция не будет работать, если вы используете WordPress версии 2.7.1 или ниже. В последнем случае спрятать ссылку, можно, используя CSS, вот так:

.more-link {display: none}

Вот, собственно, и все.

Единственно, что еще хочется добавить, что в нашей новой ссылке не будет якоря вида more-123, который присутствует в ссылке по умолчанию. Лично я в нем необходимости не вижу.

Облако тегов