Работает система Orphus

WordPress для каждого на русском языке!

  • RSS

Учебник по WordPress

Полезные советы

Хитрости

Шоукейс

О проекте

Темы WordPress на русском!

Эволюция пользовательского интерфейса WordPress (2003 – 2009)

Четверг, 14 января 2010 - Рекомендуем, Статьи и советы

WordPress каким мы видим его сейчас – это продукт любви, которой наградило его сообщество. Без идей, пожеланий, рекоммендаций и советов пользователей и тяжелой работы команды разработчиков, которая воплощала это всё в жизнь, из него никогда бы не получилось того, что есть сейчас. Сегодня WordPress предстает перед нами мощной полноценной CMS, подходящей почти под любые нужды. [...]

читать дальше

Продвинутые советы по разработке сайтов на WordPress

Понедельник, 27 июля 2009 - Рекомендуем, Статьи и советы

Последние релизы дают понять, что WordPress расширил границы своих возможностей далеко за пределы блоггинга, приобретая все больше качеств серьёзной и мощной системы по управлению контентом. Изначально, WordPress предлагает довольно поверхностный, минимальный функционал. Но простота основы с лихвой компенсируется изобилием плагинов, которые значительно увеличивают потенциал движка.

читать дальше

5 полезных и оригинальных способов использования виджетов в WordPress

Четверг, 16 июля 2009 - Рекомендуем, Статьи и советы

Если вы создали хотя бы несколько сайтов на WordPress, то вы наверняка уже знаете, что WordPress это гораздо больше, чем просто блоггинговый движок. Он может быть также использован как и CMS, а виджеты WordPress – это мощный инструмент в арсенале WP-разработчика.

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

читать дальше

Продвинутые советы по разработке сайтов на WordPress

Понедельник, 27 июля 2009 - Рекомендуем, Статьи и советы

most-commonly-used-wordpress-code-snippets
Последние релизы дают понять, что WordPress расширил границы своих возможностей далеко за пределы блоггинга, приобретая все больше качеств серьёзной и мощной системы по управлению контентом. Изначально, WordPress предлагает довольно поверхностный, минимальный функционал. Но простота основы с лихвой компенсируется изобилием плагинов, которые значительно увеличивают потенциал движка.

Зачастую, плагины предлагают простые решения. Но простота не всегда сестра таланта. Так, иногда они могут создавать ощутимый балласт, например, если включают в себя больше функций, чем необходимо. Фактически, некоторые общие и часто используемые функции можно добавить в движок и без помощи раздутых плагинов, используя софт сам по себе.

В этой статье представлены 6 советов для разработчиков сайтов на WordPress, которые рассматривают распространённые моменты по реализации тех или иных функций с минимальным использованием плагинов, или вовсе без такового.

1. Привязываем страницы к категориям постов

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

Распространенный случай: компания хочет свободный неофициальный блог, и отдельную, более официальную ленту для пресс-релизов внутри раздела "О компании". Давайте перечислим несколько требований, которые предъявит подобный клиент:

  • Ни в коем случае нельзя, чтобы эти ленты смешивались и выводились как одна.
  • Ссылки на ленты должны появиться в навигации страницы.
  • Страница с пресс-релизами должна иметь статический, но редактируемый контент над самой лентой.
  • Для SEO, эти ленты должны иметь "страничную" структуру пермалинков: другими словами “mysite.com/category/press-releases” недопустима; а наша цель “mysite.com/about-us/press-releases”.

И как обычно существует несколько решений этой проблемы. Особое внимание мы заострили на выведении лучшей техники, включая отдельно стоящие страницы лент записей (в данном случае одной - для пресс-релизов) и необходимость создания основной ленты, которая должна включать несколько категорий. Для этого примера давайте считать, что "Наш блог" должен быть полноценным блогом с категориями.

Подготовка сайта

Этот подход "страницы с отдельными лентами" основан на привязке страницы к категории постов. "Главный" блог будем считать "страницей с постами", настроенной таким образом, чтобы исключать посты из ленты "Пресс-релизы". Чтобы соответствовать требованиям SEO по обеспечению логичной и последовательной структуры URL, нам необходимо тщательно сформировать и настроить пермалинки.

  • зайдите в настройки "Чтение" и убедитесь, что для опции “На главной странице отображать” задано значение “Статическая страница”, а для “Страница записей” значение “Наш блог”.
  • в WordPress-настройках “Постоянные ссылки”, убедитесь что выбран параметр “Произвольно”. Структура должна быть такой: /%category%/%postname%/.
  • в списке страниц, установите пермалинк (или ярлык) для страницы "О компании" (в случае с сайтом, которые мы взяли для примера, пусть это будет “about-us”). Сделайте ярлык для страницы Пресс-релизы (”press-releases”).
  • добавьте две соответствующие категории: категорию "О компании" с соответственным пермалинком (”about-us”), и категорию "Пресс-релизы" с согласованным пермалинком (”press-releases”) и родительской категорией "О компании".
  • создайте пост в категории "Пресс-релизы" для тестирования.

wp-cat-config

Удаляем категорию со страницы блога

Чтобы удалить категорию с главной страницы блога (на которой отображаются все посты в пределах своих категорий), необходимо изменить функцию query в коде страницы, которая используется в шаблоне страницы блога.
Кодекс WordPress предалагет решение. Просто установите ID для категории "Пресс-релизы" (наведите мышку на имя категории в админ-панели, вы легко найдете ID, посмотрев на URL в статус-баре - для примера, пусть это будет 5), и вставьте следующий код над циклом поста:

query_posts("cat=-5");

Обратите внимание: многие шаблоны включают в себя список категорий в сайдбаре, список недавних постов, а также другие компоненты, которые не смогут исключить из себя посты категории "Пресс-релизы". Эти элементы тоже требуют модификации, чтобы можно было исключить категорию. Большинство обращений WordPress позволяют сделать это с легкостью.

Активация страницы с собственной лентой

Странице с лентой понадобится собственный отдельный шаблон страницы. Для этого примера мы назвали шаблон "Лента пресс-релизов" и использовали родной page.php как точку для старта (скопировав и переименовав в page_press.php).
Так как нам необходим статичный, редактируемый контент поверх ленты, первый пост-цикл, который выводит контент страницы, оставим без изменений. Ниже код для вывода содержимого страницы, таким образом, будут выполнены еще одна функция post query и цикл. После выполнения, query должна быть очищена с помощью “wp_reset_query”, чтобы элементы отображаемые после цикла (например, боковая навигация) могли корректно ссылаться на информацию, сохраненную в исходном query страницы.
Общий фреймворк кода представлен ниже. Документация по query posts дает нам полные и четкие инструкции по кастомизации.

query_posts('category_name=Press Releases');
if ( have_posts() ) : while ( have_posts() ) : the_post();
//выводить пост нужно здесь
endwhile; endif;
wp_reset_query();

Также разумеется нужно выбрать новый шаблон для страницы "Пресс-релизы" в редакторе.

Мелочи решают всё

В зависимости от характеристик каждого конкретного сайта, вам понадобится дополнительная кастомизация шаблона. В частности этот совет не охватывает особенностей в работе по отображению индивидуальных постов внутри изолированных лент. Углубляясь в технику, использование функции проверки состояния in_category в шаблоне “single.php” позволяет кастомизировать отображение постов, исходя из их категорий.

Альтернативные пути

Создание индивидуальных шаблонов страниц для каждой отдельной ленты является хорошим решением для сайтов имеющих лишь несколько таких лент. Тем не менее сайты на WordPress вроде m62 visual communications достаточно сильно расширяют идею ассоциаций категорий (и даже тэгов) со страницами. m62 представляет десятки страниц, ассоциированных с определенными категориями, подкатегориями и тегами, при этом перемешивая их со стандартными "статическими" страницами. В этом случае, более правильным решением будет использовать специальные шаблоны страниц, которые будут соответствовать пермалинкам тегов и категорий, а не обычных страниц, и таким образом динамически создавать эти ассоциации.

2. "Дружественные" страницы только для зарегистрированных пользователей

WordPress имеет встроенную функцию обозначить любую страницу или пост как "личный". По умолчанию эти страницы не отображаются во всех списках постов и меню (включая навигацию) и генерируют 404 ошибку если зайти по прямой ссылке - до тех пор пока пользователь не залогинен. Несмотря на практичность, чаще всего это не идеальный вариант в плане юзабильности.
Часто, сайты информируют посетителей о том, что полное содержимое некоторых страниц или постов доступно только для зарегистрированных пользователей. Дружественное сообщение, указывающее пользователям, что они попали на страницу доступную только зарегистрированным пользователям и формой авторизации, может стать отличным решением. Контент-ориентированные сайты могут дразнить публику, показывая интригующую часть всем посетителям, а давать читать до конца только после авторизации/регистрации.

Этот пример предлагает фреймворк для реализации "гибридного" (авторизован/не авторизован) способа отображения страниц и использует следующий сценарий: содержимое поста над отметкой "Read more" будет отображаться всем пользователям; контент под отметкой - зарегистрированным пользователям. Под тегом more незарегистрированным пользователям будет предложено авторизоваться или зарегистрироваться.
Этот подход будет работать не для всех постов подряд, а идентифицировать посты по custom полю, которое будет определять пост "эксклюзивным для зарегистрированных пользователей".

  1. Создайте страницу или запись.
  2. Напишите текст, видимый для пользователей.
  3. Вставьте тэг "more" в конце.
  4. Напишите текст видимый только для зарегистрированных пользователей.
  5. Добавьте custom поле с названием "member_content" и значением 1
  6. Опубликуйте запись / страницу.

wp-member-content

Следующий шаг включает в себя редактирование файлов шаблона. Это будут файлы "page.php" и "single.php". Для этого примера будем считать, мы создали запись (не страницу) с эксклюзивным контентом. Таким образом, нам нужно редактировать "single.php". Внутри шаблона найдите запрос the_content используемый для вывода содержимого. Вот как он обычно выглядит:

the_content();

Вот новый код с требуемой нам функциональностью:

if(!get_post_meta($post->ID, 'member_content', true) || is_user_logged_in()) {
    the_content('<p class="serif">Read the rest of this entry »</p>');
} else {
    global $more;
    $more = 0;
    the_content("");
    echo "<p><em>Полный текст статьи доступен только для зарегистрированных пользователей. Пожалуйста авторизуйтесь, чтобы дочитать до конца.</em></p>";
}

Совет: скомбинируйте это со следующим шагом, чтобы получить форму, которая будет возвращать пользователей к текущему посту.

3. Внедрение формы авторизации с редиректом на просматриваемую страницу

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

mip-login

Код, представленный ниже вставляет форму логина в шаблон и перегружает ту же страницу после авторизации.

<?php if(!is_user_logged_in()) { ?>
	<form action="<?php echo wp_login_url(get_permalink()); ?>" method="post">
		<label for="log"><input type="text" name="log" id="log" value="<?php echo wp_specialchars(stripslashes($user_login), 1) ?>" size="22" /> Пользователь</label><br />
		<label for="pwd"><input type="password" name="pwd" id="pwd" size="22" /> Пароль</label><br />
		<input type="submit" name="submit" value="Отправить" class="button" />
		<label for="rememberme"><input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> Запомнить меня</label>
	</form>
<?php } ?>

Примите во внимание некий подвох этого метода: если пользователь не пройдет авторизацию с первого раза, WordPress таки перебросит его на свою стандартную форму авторизации, но вернет обратно после успешной попытки.

4. Хлебные крошки без использования плагина.

breadcrumbs

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

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

Чтобы начать, вот простой способ реализации хлебных крошек, который работает только со страницами и включает в себя крошку "Home" (главную страницу сайта) в начала списка. В зависимости от дизайна конкретного шаблона, вам может понадобиться вставить этот код в какой-нибудь тег. В этом примере предполагается что код будет вставлен в файл header.php, крошки будут появляться только на страницах и не будут выводиться на главной странице. К ссылкам на текущую и домашнюю страницы также можно будет применить особый CSS класс.

if (is_page() && !is_front_page()) {
   echo '<ul id="breadcrumbs">';
   echo '<li class="front_page"><a href="'.get_bloginfo('url').'">Home</a></li>';
   $post_ancestors = get_post_ancestors($post);
   if ($post_ancestors) {
      $post_ancestors = array_reverse($post_ancestors);
      foreach ($post_ancestors as $crumb)
          echo '<li><a href="'.get_permalink($crumb).'">'.get_the_title($crumb).'</a></li>';
   }
   echo '<li class="current"><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
   echo '</ul>';
}

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

if ((is_page() &amp;amp;&amp;amp; !is_front_page()) || is_home()) {
...

Следующая модификация этого кода делает возможным включение хлебных крошек для отдельных категорий и постов. Обратите внимание, что WordPress позволяет добавлять посты в несколько категорий; чтобы не сделать из крошек нагромождения, скрипт просто выберет первую категорию из выбранных для поста. Ради простоты, исключим иерархически вложенные категории.

if ((is_page() && !is_front_page()) || is_home() || is_category() || is_single()) {
   echo '<ul id="breadcrumbs">';
   echo '<li class="front_page"><a href="'.get_bloginfo('url').'">Home</a></li>';
   $post_ancestors = get_post_ancestors($post);
   if ($post_ancestors) {
      $post_ancestors = array_reverse($post_ancestors);
      foreach ($post_ancestors as $crumb)
          echo '<li><a href="'.get_permalink($crumb).'">'.get_the_title($crumb).'</a></li>';
   }
   if (is_category() || is_single()) {
      $category = get_the_category();
      echo '<li><a href="'.get_category_link($category[0]->cat_ID).'">'.$category[0]->cat_name.'</a></li>';
   }
   if (!is_category())
      echo '<li class="current"><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
   echo '</ul>';
}

Существует много способов как дальнейшего расширения возможностей хлебных крошек. Например, вы можете захотеть сделать хлебные крошки для различных типов архивов (тэги, месяцы, годы) или внедрить поддержку иерархии категорий. Конечно, эта статья не может покрыть все возможные варианты реализации, но предложенные примеры предоставят вам ощутимый фреймворк для дальнейшей работы.

5. Выделяем избранные записи на главной странице

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

featurednews-sge

Нам потребуется специальная категория для классификации постов как "Избранное" - одноименная категория отлично подойдет для этого. В дальнейшем для редактора пометить запись "избранным" будет крайне легко. Также нам потребуется ID этой категории. Самый простой способ узнать его - навести курсор на кнопку редактирования и посмотреть в строку статуса.

Используя этот ID (например "4") и количество постов для отображения на главной странице (скажем "3"), следующий код отобразит список избранных записей начиная с самых последних.

echo "<h3>Featured Blog Posts</h3>";
echo "<ul>";
$feat_posts = get_posts('numberposts=4&category=71');
foreach ($feat_posts as $feat) {
   echo '<li><a href="'.get_permalink($feat->ID).'">'.$feat->post_title.'</a></li>';
}
echo "</ul>";

Также как и в остальных примерах, этот код может быть расширен разными путями. Например, главная страница SGE Corporation отображает отрывок самого последнего элемента блога. Отрывок можно собственноручно вводить в поле "Цитата" или если вы этого не сделаете, оно будет сгенерировано автоматически, взяв некоторое количество символов с начала поста.

6. Выделяем текущую категорию поста

Список страниц WordPress добавляет специальные class каждому елементу, включая классы, которые указывают является ли страница текущей, родительской, дочерней и так далее. Спискам категорий присваивается особый класс (current-cat), чтобы выводить элементы списка соответствующим образом в то время, когда пользователь перемещается в архивах категории. К сожалению, по умолчанию категориям не присваевается особый класс, когда пользователь переходит на запись внутри самой категории. Однако, мы можем обойти ограничения этой функции, определяя ID текущей категории и передавая его функции wp_list_categories.

$category = get_the_category();
wp_list_categories('current_category='.$category[0]-&amp;gt;cat_ID);

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

Источник: Power Tips For WordPress Template Developers

14 комментариев

  1. Антон пишет:

    Отличная статья, огромное спасибо! Теперь жизнь станет немного легче.

  2. Лучшее за июль | Блог | Womtec пишет:

    [...] Советы по разработке сайтов на WordPress — в этой статье представлены 6 советов для разработчиков сайтов на WordPress, которые рассматривают распространённые моменты по реализации тех или иных функций с минимальным использованием плагинов, или вовсе без такового. [...]

  3. Виталий пишет:

    Я еще не совсем понимаю всех прелестей ВордПресса, но у меня уже есть пара блогов на нем, в которых мне еще самому придется долго разбираться. Благодаря вашему блогу, который приятно смотрится и содержит полезную мне информацию, я думаю, я разберусь во многом.
    Ставлю ваш блог в закладки в браузер. Вот, кстати, как из самого блога можно ставить блог в закладки?

  4. Merenlin пишет:

    Как раз думала над тем как сделать несколько лент одновременно!
    Спасибо:)

  5. DW03 пишет:

    Извиняюсь немного за оффтоп, но меня интересует как сделать например чтобы посты шли с чередующимися стилями, пример – это ваши комментарии. они чередуются 2-мя цветами. Можно ли так же сделать для записей и как? заранее спасибо

    • Алексей пишет:

      http://www.o-theme.com/features/easy-odd-or-even-class/

      Могу пересказать по-русски. В том месте лупа, где у вас значится вы вставляете

      Получается допустим <div class="post-">

      На выходе будут чередоваться классы odd и even.

      Кроме этого, в functions.php нужно добавить $odd_or_even = 'odd';

      И все, css вам в руки.

  6. Интересные статьи за июль | Интересное | Womtec пишет:

    [...] Советы по разработке сайтов на WordPress — в этой статье представлены 6 советов для разработчиков сайтов на WordPress, которые рассматривают распространённые моменты по реализации тех или иных функций с минимальным использованием плагинов, или вовсе без такового. [...]

  7. Ром пишет:

    DW03
    20 декабря 2009 в 11:58
    Извиняюсь немного за оффтоп, но меня интересует как сделать например чтобы посты шли с чередующимися стилями, пример – это ваши комментарии. они чередуются 2-мя цветами. Можно ли так же сделать для записей и как? заранее спасибо

    Тоже интересно по этому вопросу. Ктонить нает?

    • Алексей пишет:

      http://www.o-theme.com/features/easy-odd-or-even-class/

      Могу пересказать по-русски. В том месте лупа, где у вас значится вы вставляете

      Получается допустим <div class="post-”>

      На выходе будут чередоваться классы odd и even.

      Кроме этого, в functions.php нужно добавить $odd_or_even = ‘odd’;

      И все, css вам в руки.

  8. Александр пишет:

    Сделал сайт на ВП статическим, теперь вот хочу попробовать вывести обновления на первой странице – на автономных недавно

  9. Макс пишет:

    Да, за то что рассказали про возможность вывести несколько лент одновременно – огромное спасибо!

  10. Алексйе Шаров пишет:

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

  11. Netbook пишет:

    Спасибо за подробное разъяснение, теперь смогу натсроить свой блог

  12. Евгений Краузе пишет:

    Узнать и почитать приятно. Спасибо.

Ваш комментарий

Этот домен продается здесь: telderi.ru, и еще много других