Нюансы разработки сайта на Wordpress
Сразу уточняю, что речь пойдет о разработке именно сайта, а не очередного блога. Т.е. задача в следующем: есть дизайн сайта – нужно натянуть его на CMS Wordpress. Что необходимо учесть в первую очередь и с какимим проблемами придется столкнуться? Давайте разберемся.
Не верите, что желания исполняются? Просто создайте свой вишлист на JustParty.ru
1. Очистить код от лишних мета-тегов
Если вы используете в шаблоне функцию wp_head() (например при использовании плагина All in the Seo), то вскоре обнаружите, как она запачкает блок <head> всевозможными мета-тегами, ссылками на RSS и т.п. Эту неприятность можно исправить следующим образом.
Создайте файл functions.php в вашей теме (если он еще не создан) и разместите код:
<? remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'wlwmanifest_link');
remove_action( 'wp_head', 'feed_links_extra');
remove_action( 'wp_head', 'feed_links');
remove_action( 'wp_head', 'rsd_link' );
remove_action( 'wp_head', 'index_rel_link' );
remove_action( 'wp_head', 'parent_post_rel_link');
remove_action( 'wp_head', 'start_post_rel_link');
remove_action( 'wp_head', 'adjacent_posts_rel_link');
?>
Таким образом, вы избавитесь от 9 лишних строк в блоке <head>.
разработка сайтов в саратове – это дело настоящих профессионалов студии Юнима.
2. Вывод записей с помощью query_posts()
позволяет выводить записи с помощью конструктора запроса $query. Т.е. если вам надо вывести записи только определенной категории и только 5, вы можете указать:
query_posts('cat=3&showposts=5&orderby=date');
И дальше как обычно цикл:
// the Loop <? while (have_posts()) : the_post();?> <a href="<?php the_permalink() ?>"><?php the_title(); ?></a> <? endwhile;?>
В чем же подвох? А в том, что если вы разместите подобный код, например, в шаблоне шапки сайта, то ваш сайт просто перестанет корректно работать. Дело в том, что в точности такой же цикл у вас будет и в шаблоне записи и в шаблоне страницы, а значит заданный вами запрос query_posts() унаследуется ими.
Чтобы этого не произошло, вам нужно использовать следующую альтернативную кострукцию:
<? $my_query = new WP_Query('cat=3&showpost=5&orderby=date');
while($my_query->have_posts()) : $my_query->the_post(); ?><li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<? endwhile; ?>
Такая конструкция обеспечит условие того, что цикл в шапке будет выполняться только по запросу $my_query, который не будет иметь отношения к обычному циклу в шаблоне записи и страницы.
3. Несколько блоков навигации
Если перед вами стоит задача вывести несколько блоков навигации, например, верхнее меню, меню слева и .т.п., то вам поможет в этом использование произвольных полей. Не волнуйтесь, здесь не будет много кода :)
Все решается очень просто с помощью встроенной конструкции wp_list_pages(), где в качестве параметра можно указать название произвольного поля meta_key, например:
<?php wp_list_pages('sort_column=menu_order&title_li=&meta_key=top_menu'); ?>
Таким нехитрым образом можно вывести определенный список страниц в любой части сайта.
На этом пока все, но я обязательно продолжу рассказывать о наиболее волнующих проблемах разработки сайта на Wordpress в следующих статьях.
www.fewor.ru – личный блог, посвященный IT-новостям, обзорам интернет ресурсов, а также советы по созданию сайтов.






Dmoz
Такие приемы больше используются в журнальных темах.
Про wp_head() не понял, а не проще его вообще не вставлять в header.php?
Цитировать
полезно!недавно открыл для себя использование query_posts();
Цитировать
Я уточнила, что если использутся плагин All in the Seo, то без wp_head() не обойтись.
Цитировать
Вообще не вижу смысла в создании сайта на WP, если только бложек :)
Цитировать
Cмысл в том что ВП значительно легче других CMS, и если нужен простенький сайт то ВП самое оно. )
Цитировать
Не согласен с этим, CMS требуется практически везде, т.к. за кажущейся простотой проекта мы порой забываем о его масштабируемости, особенно если это коммерческий проект: начинается все с визитки, а по мере разработки требований, оказывается что “и тут и там” полно динамически генерируемого кода, вот тут то и приходит принцип “отдели контент от дизайна” – проблем будет меньше в будущем, и при редизайне и при Update’s мероприятиях.
Как правило, когда клиент обращается с заказом типа “да мне тут чуть-чуть совсем, так, странички 3-4..”, команда сразу начинает выбирать CMS, а WP хорош тем, что во-первых свободно распростроняется по лицензии GNU с открытым исходным кодом, а во-вторых можно сделать абсолютно, подчеркиваю, абсолютно любой проект, любой сложности, не задумываясь о таких вещах как к примеру безопасность(очень важно), учитывая множество плагинов по этому поводу и т.п.
Так что WP – вперед! .. и не только для блогов, ИМХО :)
Цитировать
Я конечно совсем не в тему, но я хотел узнать как изменить цвет своих комментов… У меня на сайте такая же тема как и у Вас, только я немного усовершенствовал ей комменты (добавил ответить на комментарий и т. п.)… Никакие теперь плагины (типа Highlight author comments) не работают, пробовал заменить строчку
<li <?php echo $oddcomment; ?>id="comment-<?php comment_ID() ?>">(по одному рецептику) только у меня ее теперь нет… В CSS такая новенькая муть/* Comments*/#comment { width:590px; background:#fff; }
div#cancel-comment-reply { font-weight:bold; }
#comments ul.commentlist { margin-top:20px; list-style:none; }
#comments ul.commentlist blockquote { background:#ededed; }
#comments .clearfloat { background:none; }
#comments div.navigation { padding:5px 0px 20px 0px; font-weight:bold; }
ul.commentlist li.pingback, ul.commentlist li.trackback { display:none; }
ul.commentlist li.comment { color:#4d4d4d; padding: 11px 14px 11px 14px; background:#f2f2f2; list-style:none; margin-bottom:10px; font-size:11px; line-height:18px; border-bottom: 1px solid #dcdbd7; }
ul.commentlist li.comment h3#respond { background:#fff; margin-top:15px; }
ul.commentlist li.comment img.avatar { border:1px solid #ccc; margin:0px 0px 13px 13px; float:right; padding:2px; width:47px; height:47px; }
ul.commentlist li.comment cite { color:#313228; font-weight:bold; font-style: normal; font-size:14px; }
ul.commentlist li.comment div.comment-meta { font-size:10px; margin-top:0px; }
ul.commentlist li.comment div.comment-meta a { color:#4d4d4d; text-decoration:none; }
ul.commentlist li.comment a { text-decoration:underline; }
ul.commentlist li.comment cite a { text-decoration:none; font-style: normal; }
ul.commentlist li.comment div.reply { clear:both; display:block; }
ul.commentlist li.comment div.reply a { text-decoration:none; font-weight:bold; }
ul.commentlist li.comment p { margin:15px 0px; padding:0; }
ul.commentlist li.comment blockquote { width:380px; }
ul.children li.comment { margin-top:15px; color:#4d4d4d; padding: 12px 12px 12px 12px; background:#fff; border:none; list-style:none; margin-bottom:0px; font-size:11px; }
ul.commentlist li.depth-1, ul.children li.depth-3, ul.children li.depth-5, ul.children li.depth-7, ul.children li.depth-9 { background:#f2f2f2; }
ul.children li.depth-2, ul.children li.depth-4, ul.children li.depth-6, ul.children li.depth-8, ul.children li.depth-10 { background:#fff; }
#respond textarea { width:99%; font-size:13px; }
#respond label { font-weight:bold; }
#respond a {text-decoration:none; }
#respond h3 {margin-top:15px; }
li.comment div#respond h3 { display:none; }
Даже не знаю куда bypostauthor сунуть…
Заранее спасибо!!!
Цитировать
@TaPo4eK,
у меня выделение моих комментариев сделано довольно просто:
в файле comments.php:
<ul class=”commentlist”>
<?php foreach ($comments as $comment) : // начинается цикл?>
<?php
$isByAuthor = false;
if($comment->comment_author_email == get_the_author_email()) {
$isByAuthor = true;
}
// далее непосредсвенно идет LI, в котором ставим условие на авторский коммент (класс прибавляем) ?>
<li id=”comment-<?php comment_ID() ?>” <?php if($isByAuthor ) { echo ‘class=”my_comment”‘;} ?>>
Цитировать
@Блог для вебмастеров,
У меня foreach и сам li (лист) заменяет одна строка
<?php wp_list_comments(array('avatar_size'=>47, 'reply_text'=>__('Ответить »'))); ?>по некоторым рецептам в CSS рекомендуют добавить (лист)bypostauthor… В первом моем комменты видно что настроить bypostauthor не получиться… (ну помоему =)Цитировать
@TaPo4eK,
если верить , то вордпресс сам добавляет класс
.bypostauthorкLI, если он пренадлежит автору. Тогда получается надо лишь прописать:li.bypostauthor { css comes in here }Там как раз ваш случай написан, когда используется автоматический вывод с помощью
wp_list_comments()Цитировать
@TaPo4eK,
вот, нашла в коде комментария на вашем блоге:
<li class=”comment byuser comment-author-admin bypostauthor odd alt depth-2″ id=”comment-2″>
Добавьте в CSS класс
ul.commentlist li.bypostauthor {...}а чтобы стили не затерлись другими классами, ставьте у свойств
!important;, т.е. например:ul.commentlist li.bypostauthor {background:#ccc !important;}Цитировать
Enot пишет:
Вообще не вижу смысла в создании сайта на WP, если только бложек :)
Так в этом и нет никакого смысла!! Невижу вообще в этой статье ничего нового!!
Цитировать
Ольга, спасибо за 2 хорошие идеи (remove_action wp_head и query_posts). А для получения списка постов в произвольном месте, похоже, можно ещё использовать функцию get_posts.
А вызов wp_head() из header.php удалять нежелательно, так как эта функция очень часто используется различными плагинами. Удалишь – потом будешь недоумевать, почему у тебя не работает или косячит какой-то плагин.
Цитировать
Подскажите как поля уменьшать в шаблонах?
И вообще как редактировать чтобы сайт не расплывался?
Цитировать
Честно говоря, не совсем понятно, про какие поля речь… Все правится в CSS, другое дело понимать, что к чему относится.
Цитировать
Похоже что на Wordpress надо надеть хороший корсет! Иначе сайт на бложную платформу так просто не станет!
Цитировать
Я думаю, что Таня имела ввиду.. как бы выразиться. Просто есть шаблоны, где сайт, как бы раземещен по средине, а края пустые (т.е. большие поля). Может о них?
Цитировать
Оля, я часто у тебя консультируюсь, за что огромное спасибо! Но иногда я себя чувствую полным иди…м я не совсем понял смысл query_posts(), что это дает , когда это может понадобиться и почему не стоит применять обычную конструкцию.И почему когда мы создаем обычный сайт а не блог мы не можем использовать страницы (PAGES)?
И по первому пункту Не проще очистить heder от лишнего мусора, а вместо Seo-плагинов для добавления любых мета тегов использовать произвольные поля, по крайней мере мы будем контролировать что никакого мусора не будет…И кода меньше.
И как обычно в конце традиционный вопрос не в тему: У вас в поиске по блогу справа картиночка с лупой и курсор меняется при наведении на указующий перст. Как это можно сделать ? Раньше (лет пять назад) я как то делал с помощью стилей ( атрибут cursor – hand ) Сейчас это почемуто не работает…
Цитировать
query_posts() – позволяет сделать выборку только определеных записей. Например так у меня сделан на блоге блок новостей – выбрана только категория по id и кол-во записей.
С этой конструкцией нужно быть осторожным, т.к. запрос может унаследоваться конструкциями которые будут идти ниже по структуре шаблона и стандартый loop будет работать только для данного запроса.
Почему же нельзя использовать pages… Все зависит от структуры сайта..
Если вы не используете в шаблоне тег wp_head(), то проблем с мета-тегами не будет и можно не заморачиваться с чисткой, а использовать обычные значения title, keywords и description из произвольных полей. Но как правило, многие вставляют в сайты разные плагины (галереи, форма обратной связи) и они требуют тег wp_head()
нужно использовать
cursor:pointer:)Цитировать
Огромное спасибо за исчерпывающий ответ. Все поправил – работает.
Цитировать
Многие мои знакомые попробовав разные CMS, в конечном счете по разным причинам остановились на WP. Причем разрабатывают они корпоративные сайты а не блоги.
Действительно WP имеет ряд неудобств для создания сайтов, и эту тему хотелось бы развить, если Вы Ольга поможете…
Цитировать
@vic,
Я с вами согласна :) У вас есть какое-то конкретное предложение ко мне? Милости прошу на почту – webmaster(dog)getincss.ru :)
Цитировать
Сайт надо создавать не WP, а с нормальным доменом и т.д. Для этого WP просто не расчитан!
Цитировать
>Про wp_head() не понял, а не проще его вообще не вставлять в header.php?
Проще-не-проще, но плагины, подключающие скрипты в хед, работать не будут.
Цитировать
По-моему, лучше вообще не использовать вордпресс для создания полнофункциональных сайтов. Существует немало отличных движков, более подходящих для этого.
Но это дело каждого, конечно же.
Цитировать
А при помощи какой функции можно настроить вывод подрубрик нужной рубрики?
К примеру нужно вывести список стран из рубрики “Страны” но без родительской.
Цитировать
Господин адреналиньщик, какие движки для создания “полнофункциональных” сайтов Вы знаете и можете предложить, хотелось бы еще аргументы, чем же они лучше?
Цитировать
ту же WP_Query, как в примере – выводится только категория с ID=3. Просто указываете ID нужной вам категории и все
Цитировать
от себя добавлю что если ваш сайт без www надо сразу перед индексацией роботами следует создать robots.txt с host: свой сайт и убрать редиректы. Иначе вордпресс будет передавать яндексу 301 заголовок
Цитировать
Довольно странный материал вы нам предоставили
Цитировать
Можно просто ставить wp_reset_query() после каждого вывода записей где используется query_posts()
Цитировать
— get_categories с параметром child_of.
Цитировать