Циклом (the loop) в WordPress-е называют код, который выводит публикации в желаемой последовательности.
Цикл присутствует во всех файлах темы, формирующих отображение основного текста, будь то главная страница, отдельная запись или отдельная страница, архив, страница автора, метки или любая другая выборка записей.
Ядро цикла состоит из нескольких строк кода, включающего в себя как стандартные операторы php, так и функции WordPress.
Вот, как выглядит типичный цикл:
|
<?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2> <?php the_content(); ?> <?php endwhile; ?> <?php else : ?> <?php endif; ?>
|
//Если соответствующие записи найдены: //для каждой записи //отобразить заголовок, //отобразить содержимое //и остановиться, когда записи закончатся. //в противном случае… //Цикл завершен. |
Дополнительные параметры записи, такие, как дата создания, автор, рубрика, метки и комментарии могут быть вставлены в каждый файл произвольно.
Так или иначе, мы получаем одинаковый код в нескольких файлах, а вынеся его в отдельный файл можно существенно уменьшить размер темы оформления – Slaff предложил способ, как это сделать, а мы разберем и дополним его:
Читать дальше…
Поговорим о файле functions.php.
Казалось бы, функции вынесенные во внешний файл, что тут необычного?
Прежде всего – эти функции имеют максимальный приоритет, то есть обрабатываются в самом начале загрузки страницы.
Это значит, что собрав в functions.php все мелкие функции из часто используемых плагинов мы можем слегка разгрузить сервер и уменьшить время загрузки страницы.
Например, плагин maxsite-memory-usage.php от Макса определяет объём использованной памяти и количество запросов, а состоит всего из четырёх строк:
add_action(‘wp_footer’, ‘maxsite_memory_usage’);
function maxsite_memory_usage() {
if ( function_exists(‘memory_get_usage’) ) echo ‘ Потребление памяти: ‘ . round(memory_get_usage()/1024/1024, 2) . ‘MB’;
} |
При вызове функции в виде плагина происходит обращение к базе данных; та же функция, записанная в functions.php позволяет сократить количество запросов к базе данных и выполнить тот же код. И редактировать самые используемые функции из одного файла проще, чем рыться в папке /plugins/
Мелочь? Да, если эта функция одна. А если их десяток – это уже, как минимум сокращение на десять запросов к базе данных.
Что сюда можно добавить? Любой код, как из плагинов, так и собственный:
Начнём с кода файла index.php, выдернутого наугад из первой попавшейся темы:
Окончания слова “комментарий” – то есть, “2 комментария”, “5 комментариев” и так далее.
function russ_comments_number($zero = false, $one = false, $more = false, $deprecated = ”) {
global $id;
$number = get_comments_number($id);
if ($number == 0) {$output = ‘Прокомментируете?’;}
elseif ($number == 1) {$output = ‘1 комментарий’;}
elseif (($number > 20) && (($number % 10) == 1)) {$output = str_replace(‘%’, $number, ‘% комментарий’);}
elseif ((($number >= 2) && ($number <= 4)) || ((($number % 10) >= 2) && (($number % 10) <= 4)) && ($number > 20))
{$output = str_replace(‘%’, $number, ‘% комментария’);}
else {$output = str_replace(‘%’, $number, ‘% комментариев’);}
echo apply_filters(‘russify_comments_number’, $output, $number);
}
add_filter(‘comments_number’, ‘russ_comments_number’); |
Блокировка своего собственного пинга
function no_self_ping(&$links) {
$home = get_option( ‘home’ ); foreach ( $links as $l => $link ) if ( 0 === strpos( $link, $home ) ) unset($links[$l]);}
add_action( ‘pre_ping’, ‘no_self_ping’ ); |
Удаление дубликатов содержимого из обхода поисковых роботов
$index_category_pages = true;
function seofriend_wp_head() {
global $index_category_pages;
if($index_category_pages){
if( ( (is_single() || is_page() || is_home()) && (!is_paged()) ) || is_category())
{echo “<meta name=”robots” content=”index,follow” />n”;}
else{echo “<meta name=”robots” content=”noindex,follow” />n”;}
}else{
if((is_single() || is_page() || is_home()) && (!is_paged()))
{echo “<meta name=”robots” content=”index,follow” />n”;}
else{echo “<meta name=”robots” content=”noindex,follow” />n”;}
}
}
add_action(‘wp_head’, ’seofriend_wp_head’); |
Добавление социальных закладок в записи. В нужном месте вставить <?php social(); ?>
function social() {
$u = urlencode(get_permalink());
$t = get_the_title();
$social=<<<EOF
function so(u,t) {
for (i=0; i<s.length; i=i+2) document.write(‘<a title=”Добавить закладку на эту статью Levati’s blog-а в ‘+s[i]+’” href=”http://’+s[i]+’/’+s[i+1].replace(‘{u}’,u).replace(‘{t}’,t)+’” target=”_blank”>’+
‘<img src=”путь_к_папке_с_иконками’+s[i]+’.ico” border=”0″ alt=”Добавить в ‘+s[i]+’” width=”16″ height=”16″ /></a>’
);
}
var s=new Array(“del.icio.us”,”post?url={u}&title={t}”, “news2.ru”,”add_story.php?url={u}”, “google.com”,”bookmarks/mark?op=edit&bkmk={u}&title={t}”, “bobrdobr.ru”,”add.html?url={u}&title={t}”, “memori.ru”,”link/?sm=1&u_data[url]={u}&u_data[name]={t}”, “moemesto.ru”,”post.php?url={u}&title={t}”, “mister-wong.ru”,”add_url/?bm_url={u}&bm_description={t}”, “rumarkz.ru”,”bookmarks/?action=add&popup=1&address={u}&title={t}&description={t}”, “rucity.com”,”bookmarks.php?action=add&address={u}&title={t}&description=”, “linkstore.ru”,”servlet/LinkStore?a=add&url={u}&title={t}”, “myscoop.ru”,”add/?title={t}&URL={u}”, “vaau.ru”,”submit/?action=step2&url={u}”, “newsland.ru”,”News/Add/type/news/”);
EOF;
echo <<<EOF
<p class=”social”><script type=’text/javascript’>$social so (‘$u’, encodeURIComponent(‘$t’));</script></p>
EOF;
} |
Напоминание об RSS-подписке
function subscribe_remind($content) {
if ( !is_feed() && !is_page() && !is_home() && !is_search() && !is_archive() && !is_author() && !is_category() && !is_paged())
$content .= ‘<div id=”remind”>Будьте в курсе новостей сайта, <a href=”url_Вашей_RSS_ленты”>Подпишитесь на RSS ленту</a>!</div>’;
return $content;
}
add_filter(‘the_content’, ’subscribe_remind’, 999); |
|
|
Второе применение functions.php – виджеты. Собственно, добавляется еще одна функция, которая определяет блоки в теме оформления сайта, настраиваемые из админпанели. Весь её код:
if ( function_exists(‘register_sidebar’) )
register_sidebar(array(
‘before_widget’ => ‘<div”>’, //тег перед виджетом
‘after_widget’ => ‘</div>’, //тег после виджета
‘before_title’ => ‘<h2>’, //тег перед заголовком виджета
‘after_title’ => ‘</h2>’, //тег после заголовка виджета
)); |
Виджеты – это находка для любящих поэкспериментировать: лучше, если справа вывести рубрики и ссылки, а слева архив и поиск, или если наоборот поменять? А может… вот именно виджетизированный скин и подойдёт для определения “может” и “не может”.
Если же Вы точно знаете, чего хотите – пропишите это в теме статически и сэкономьте еще немного памяти.
PS: За давностью коллекции некоторые авторы утеряны, но примазываться к чужой славе не по-взрослому, потому, если в перечне кто-то узнает свои функции – в комментарии укажите ссылку на оригинал, в записи я поставлю его напрямую.
Сегодня, как и было заявлено в прошлой статье, мы поговорим о файле style.css.
Строго говоря, файл каскадной таблицы стилей, CSS может быть и не один, но, если такая необходимость есть, дополнительные файлы лучше размещать не в корне темы оформления, а в отдельной папке /css/ . Туда можно разместить:
- custom.css – пользовательский стиль
- print.css – стиль элементов для вывода страницы на печать
- reset.css – сброс стандартного отображения элементов в браузере
- ie.css – исключения для “любимца” веб-дизайнеров и т.д.
Вызвать файл можно либо напрямую указав путь к файлу, либо функциями WordPress:
Читать дальше…