Главная » Веб-разработка

Нюансы разработки сайта на Wordpress

23 Июль 2009 просмотров 8,061 комментариев 33


Сразу уточняю, что речь пойдет о разработке именно сайта, а не очередного блога. Т.е. задача в следующем: есть дизайн сайта – нужно натянуть его на 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_posts($query) позволяет выводить записи с помощью конструктора запроса $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-новостям, обзорам интернет ресурсов, а также советы по созданию сайтов.

Комментариев 33 »

  • ]]>madbirdy пишет: ]]>

    Такие приемы больше используются в журнальных темах.
    Про wp_head() не понял, а не проще его вообще не вставлять в header.php?  

    Цитировать

  • ]]>Геннадий пишет: ]]>

    полезно!недавно открыл для себя использование query_posts();  

    Цитировать

  • ]]>Блог для вебмастеров пишет: ]]>

    Я уточнила, что если использутся плагин All in the Seo, то без wp_head() не обойтись.  

    Цитировать

  • ]]>Enot пишет: ]]>

    Вообще не вижу смысла в создании сайта на WP, если только бложек :)  

    Цитировать

  • ]]>Masya пишет: ]]>

    Cмысл в том что ВП значительно легче других CMS, и если нужен простенький сайт то ВП самое оно. )  

    Цитировать

  • ]]>Viktor.S.Karpov пишет: ]]>

    Enot:
    Вообще не вижу смысла в создании сайта на WP, если только бложек :)

    Не согласен с этим, CMS требуется практически везде, т.к. за кажущейся простотой проекта мы порой забываем о его масштабируемости, особенно если это коммерческий проект: начинается все с визитки, а по мере разработки требований, оказывается что “и тут и там” полно динамически генерируемого кода, вот тут то и приходит принцип “отдели контент от дизайна” – проблем будет меньше в будущем, и при редизайне и при Update’s мероприятиях.
    Как правило, когда клиент обращается с заказом типа “да мне тут чуть-чуть совсем, так, странички 3-4..”, команда сразу начинает выбирать CMS, а WP хорош тем, что во-первых свободно распростроняется по лицензии GNU с открытым исходным кодом, а во-вторых можно сделать абсолютно, подчеркиваю, абсолютно любой проект, любой сложности, не задумываясь о таких вещах как к примеру безопасность(очень важно), учитывая множество плагинов по этому поводу и т.п.
    Так что WP – вперед! .. и не только для блогов, ИМХО :)  

    Цитировать

  • ]]>TaPo4eK пишет: ]]>

    Блог для вебмастеров: Я уточнила, что если использутся плагин All in the Seo, то без wp_head() не обойтись.

    Я конечно совсем не в тему, но я хотел узнать как изменить цвет своих комментов… У меня на сайте такая же тема как и у Вас, только я немного усовершенствовал ей комменты (добавил ответить на комментарий и т. п.)… Никакие теперь плагины (типа 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”‘;} ?>>
      

    Цитировать

  • ]]>TaPo4eK пишет: ]]>

    @Блог для вебмастеров,
    У меня foreach и сам li (лист) заменяет одна строка <?php wp_list_comments(array('avatar_size'=>47, 'reply_text'=>__('Ответить &raquo;'))); ?> по некоторым рецептам в 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;}  

    Цитировать

  • ]]>Ela пишет: ]]>

    Enot пишет:

    Вообще не вижу смысла в создании сайта на WP, если только бложек :)

    Так в этом и нет никакого смысла!! Невижу вообще в этой статье ничего нового!!  

    Цитировать

  • ]]>Андрей пишет: ]]>

    Ольга, спасибо за 2 хорошие идеи (remove_action wp_head и query_posts). А для получения списка постов в произвольном месте, похоже, можно ещё использовать функцию get_posts.

    madbirdy:Про wp_head() не понял, а не проще его вообще не вставлять в header.php?

    А вызов wp_head() из header.php удалять нежелательно, так как эта функция очень часто используется различными плагинами. Удалишь – потом будешь недоумевать, почему у тебя не работает или косячит какой-то плагин.  

    Цитировать

  • ]]>Tanyusya пишет: ]]>

    Подскажите как поля уменьшать в шаблонах?
    И вообще как редактировать чтобы сайт не расплывался?  

    Цитировать

  • ]]>Блог для вебмастеров пишет: ]]>

    Tanyusya:

    Подскажите как поля уменьшать в шаблонах?
    И вообще как редактировать чтобы сайт не расплывался?

    Честно говоря, не совсем понятно, про какие поля речь… Все правится в CSS, другое дело понимать, что к чему относится.  

    Цитировать

  • ]]>Нино Кастарадзе пишет: ]]>

    Похоже что на Wordpress надо надеть хороший корсет! Иначе сайт на бложную платформу так просто не станет!  

    Цитировать

  • ]]>Petrya пишет: ]]>

    Я думаю, что Таня имела ввиду.. как бы выразиться. Просто есть шаблоны, где сайт, как бы раземещен по средине, а края пустые (т.е. большие поля). Может о них?  

    Цитировать

  • ]]>vic пишет: ]]>

    Оля, я часто у тебя консультируюсь, за что огромное спасибо! Но иногда я себя чувствую полным иди…м я не совсем понял смысл query_posts(), что это дает , когда это может понадобиться и почему не стоит применять обычную конструкцию.И почему когда мы создаем обычный сайт а не блог мы не можем использовать страницы (PAGES)?

    И по первому пункту Не проще очистить heder от лишнего мусора, а вместо Seo-плагинов для добавления любых мета тегов использовать произвольные поля, по крайней мере мы будем контролировать что никакого мусора не будет…И кода меньше.

    И как обычно в конце традиционный вопрос не в тему: У вас в поиске по блогу справа картиночка с лупой и курсор меняется при наведении на указующий перст. Как это можно сделать ? Раньше (лет пять назад) я как то делал с помощью стилей ( атрибут cursor – hand ) Сейчас это почемуто не работает…  

    Цитировать

  • ]]>Блог для вебмастеров пишет: ]]>

    vic:

    не совсем понял смысл query_posts(), что это дает , когда это может понадобиться и почему не стоит применять обычную конструкцию.И почему когда мы создаем обычный сайт а не блог мы не можем использовать страницы (PAGES)?

    query_posts() – позволяет сделать выборку только определеных записей. Например так у меня сделан на блоге блок новостей – выбрана только категория по id и кол-во записей.
    С этой конструкцией нужно быть осторожным, т.к. запрос может унаследоваться конструкциями которые будут идти ниже по структуре шаблона и стандартый loop будет работать только для данного запроса.

    Почему же нельзя использовать pages… Все зависит от структуры сайта..

    И по первому пункту Не проще очистить heder от лишнего мусора, а вместоSeo-плагинов для добавления любых мета тегов использовать произвольные поля

    Если вы не используете в шаблоне тег wp_head(), то проблем с мета-тегами не будет и можно не заморачиваться с чисткой, а использовать обычные значения title, keywords и description из произвольных полей. Но как правило, многие вставляют в сайты разные плагины (галереи, форма обратной связи) и они требуют тег wp_head()

    И как обычно в конце традиционный вопрос не в тему: У вас в поиске по блогу справа картиночка с лупой и курсор меняется при наведении на указующий перст. Как это можно сделать ?

    нужно использовать cursor:pointer :)  

    Цитировать

  • ]]>vic пишет: ]]>

    Огромное спасибо за исчерпывающий ответ. Все поправил – работает.  

    Цитировать

  • ]]>vic пишет: ]]>

    Многие мои знакомые попробовав разные CMS, в конечном счете по разным причинам остановились на WP. Причем разрабатывают они корпоративные сайты а не блоги.
    Действительно WP имеет ряд неудобств для создания сайтов, и эту тему хотелось бы развить, если Вы Ольга поможете…  

    Цитировать

  • ]]>Блог для вебмастеров пишет: ]]>

    @vic,
    Я с вами согласна :) У вас есть какое-то конкретное предложение ко мне? Милости прошу на почту – webmaster(dog)getincss.ru :)  

    Цитировать

  • ]]>Артем пишет: ]]>

    Сайт надо создавать не WP, а с нормальным доменом и т.д. Для этого WP просто не расчитан!  

    Цитировать

  • ]]>Сергей М. пишет: ]]>

    >Про wp_head() не понял, а не проще его вообще не вставлять в header.php?

    Проще-не-проще, но плагины, подключающие скрипты в хед, работать не будут.  

    Цитировать

  • ]]>Адреналинщик пишет: ]]>

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

    Но это дело каждого, конечно же.  

    Цитировать

  • ]]>Max пишет: ]]>

    А при помощи какой функции можно настроить вывод подрубрик нужной рубрики?
    К примеру нужно вывести список стран из рубрики “Страны” но без родительской.  

    Цитировать

  • ]]>vic пишет: ]]>

    Господин адреналиньщик, какие движки для создания “полнофункциональных” сайтов Вы знаете и можете предложить, хотелось бы еще аргументы, чем же они лучше?  

    Цитировать

  • ]]>Блог для вебмастеров пишет: ]]>

    ту же WP_Query, как в примере – выводится только категория с ID=3. Просто указываете ID нужной вам категории и все  

    Цитировать

  • ]]>PHP-man пишет: ]]>

    от себя добавлю что если ваш сайт без www надо сразу перед индексацией роботами следует создать robots.txt с host: свой сайт и убрать редиректы. Иначе вордпресс будет передавать яндексу 301 заголовок  

    Цитировать

  • ]]>pseudoshall пишет: ]]>

    Довольно странный материал вы нам предоставили  

    Цитировать

  • ]]>rOOse пишет: ]]>

    В чем же подвох? А в том, что если вы разместите подобный код, например, в шаблоне шапки сайта, то ваш сайт просто перестанет корректно работать. Дело в том, что в точности такой же цикл у вас будет и в шаблоне записи и в шаблоне страницы, а значит заданный вами запрос query_posts() унаследуется ими.

    Можно просто ставить wp_reset_query() после каждого вывода записей где используется query_posts()  

    Цитировать

  • ]]>Smirnoff пишет: ]]>

    Max: А при помощи какой функции можно настроить вывод подрубрик нужной рубрики?
    К примеру нужно вывести список стран из рубрики “Страны” но без родительской.  

    http://codex.wordpress.org/Function_Reference/get_categoriesget_categories с параметром child_of.  

    Цитировать

Комментарии

Добавьте ваш комментарий, или трекбэк с сайта. Вы также можете подписаться на комментарии к этой статье через RSS.

Вы можете использовать теги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Чтобы получить аватарку, зарегистрируйтесь на Gravatar.