Архив категории: ‘WordPress’

Разбиение комментариев на страницы в wordpress без плагинов

Wednesday, 04 Nov 09 в 16:53

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

1. Первым делом заходим в раздел «Настройки» пункт меню «Обсуждение». Здесь сразу после пункта включения древовидных комментариев вы увидите поле для разбиения по страницам:

страницы комментарии wordpress

В настройках wordpress вы можете указать сколько комментариев должно помещаться на одной странице, какую страницу отображать по умолчанию (первую или последнюю), а также порядок сортировки самих комментариев на страницах – сверху отображаются либо новые, либо старые записи посетителей. Тут каждый должен установить настройки по своему усмотрению, мои параметры смотрите на рисунке выше.

2. Второй шаг – это подготовка шаблона. Если у вас новомодный макет, который учитывает все плюсы последних версий wordpress (в том числе и разбиение комментариев по страницам), то вам повезло. Ничего делать не нужно – просто наслаждайтесь ведением блога. В противном случае над комментариями придется «поколдовать».

В версиях wordpress старше 2.7 за вывод комментариев отвечает функция wp_list_comments(), поэтому вывод комментариев в шаблоне придется изменить так, как это описано в моей статье про древовидными комментариями в wordpress (если что там же есть ссылка на аналогичный пост еще одного специалиста по wordpress Дмитрия Донченко – тоже можете использовать).

3. Третий пункт – добавления навигации по комментариям. После правки шаблона и включения настроек в админке, вы должны получить работающее разбиение по страницам. То есть при наличии нужного числа комментариев в блоге вы увидите отображение последней их страницы, например, если к посту набралось 53 записи, а на каждой странице по 50 сообщений, то увидите всего лишь 3. Нужно добавлять навигацию, для этого используем специальные функции wordpress:

<div class="navigation1"><?php paginate_comments_links(); ?></div>
 <ol class="commentlist">
  <?php wp_list_comments('callback=mytheme_comment'); ?>
 </ol>
<div class="navigation2"><?php paginate_comments_links(); ?></div>

Код выше выводит до и после комментариев перечень допустимых страниц. Использую для этого функцию paginate_comments_links().

Кроме того, существуют еще 2 функции previous_comments_linknext_comments_link, которые выводят ссылку на предыдущую и следующую страницу комментариев без цифр. В общем, используйте вариант, который вам наиболее подходит.

4. После настройки всех функциональных особенностей разбиения комментариев на странице следует позаботиться о дублированном контенте. При разбиении вы получаете отдельные страницы с одинаковым текстом и разными комментариями – да, последние могут внести какое-то разнообразие в внешний вид страницы перед поисковиками, но основного теста значительно больше. В общем, нужно закрыть от индексации страницы с комментариями – для этого вам пригодится плагин Platinum SEO (очень хорошая штука). В настройках плагина есть опция «Use noindex for comment pages of posts». Активируя ее, вы получите в коде каждой страницы с комментариями запись:

<meta name="robots" content="noindex,follow" />

Что запрещает индексирование контента этой страницы. Вот, в принципе, и все:) По-моему, алгоритм ясен и предельно прозрачен. Если есть какие-то вопросы и дополнения – пишите в комментариях.

сервис рассылки сообщений UniSenderP.S. Постовой у нас сегодня необычный. Предлагаю вашему вниманию сервис рассылки сообщений UniSender, который предлагает быструю персонализированную рассылку e-mail сообщений с возможностью использования HTML и отправки файлов. UniSender обладает рядом преимуществ и уникальный возможностей, выделяющих его среди конкурентов. Во-первых, это беспроблемная рассылка – вы просто загружаете контакты клиентов и составляете письмо, все технические вопросы относительно почтовых серверов, проблем со спам листами вас не касаются. UniSender предлагает автоматизацию ведения списков рассылки – подписка, отписка, отсеивание нерабочих адресов и противостояние спаму. Также вы можете задать оформленные HTML-сообщения по своему усмотрению с помощью удобного текстового редактора, а после проведения кампании сможете проанализировать ее статистическую информацию и эффективность. В общем, UniSender позволит организовать ваши email рассылки профессионально и качественно.

Понравился пост? Подпишись на обновления блога по RSS для блоггеров и вебмастеровRSS, RSS для блоггеров и вебмастеровEmail или RSS для блоггеров и вебмастеровtwitter!

Новые функции WordPress 2.9 – редактор изображений, превью

Saturday, 17 Oct 09 в 14:33

Я еще не успел я обновить все свои блоги до последней версии 2.8.4, некоторые еще на 2.7 работают, а тут уже полным ходом народ тестируют бета сборку WordPress 2.9. По традиции хотелось бы несколько слов сказать о данном новом релизе, что намечается. С каждой новой версией разработчики все ближе и ближе продвигаются в к совершенству, хотя это делает данную CMS все более масштабной. В последних версиях было несколько очень интересных нововведений, которые упрощают работу, делают ее более удобной. Интересно, что на официальном сайте проходят опросы пользователей какие фишки разрабатывать в дальнейшем. После чего, на основании этих данных, программисты трудятся в том или ином направлении.

В функциональности WordPress 2.9 много внимания было уделено изображениям, по крайней мере, об этом свидетельствую следующие 2 новые возможности. Во-первых, это редактор изображений WordPress Image Editor, который позволяет выполнять базовые операции с картинками без использования сторонних программ или специальных плагинов. В этом редакторе можно отобразить картинку по вертикали или горизонтали, повернуть, изменить размеры или вырезать часть изображения.

WordPress 2.9 Image Editor

Вторая функция – картинка превью для статей, то есть возможность добавить изображения к посту, как это часто бывает в шаблонах WordPress в стиле magazine. Теперь нет необходимости вставлять картинки в сам текст, данная опция появится в качестве настроек статьи, как для тегов, категорий и т.п. При этом доступна также будет функция the_post_image(), которая будет это самое изображение выводить в блоге. При этом можно также будет определять размер картинки:

the_post_image(); // without parameter -&gt; Thumbnail
the_post_image('thumbnail'); // Thumbnail
the_post_image('medium'); // Medium resolution

Wordpress 2.9 функции

К сожалению, пока (в бета версии) недоступно выравнивание alignleft, alignright и aligncenter, поэтому изображение выводится не очень красиво в посте. Думаю, к основному релизу эта неточность будет устранена.

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

  • Корзина сообщений – теперь удаленные посты, страницы, комментарии будут иметь специальный статус, определяющий их положение в корзине. Позже их можно будет восстановить.
  • Метаданные для комментариев – разработчики плагинов и тем использовать их для выделения и подсветки наиболее популярных или самых топовых комментариев.
  • Пользовательские типы постов – поддержка типов постов отличных от стандартных «пост», «страница», «приложение». Это дарит определенную свободу для организации собственных данных, будет интересно попробовать данную функцию.
  • Вставка медиа – насколько я понимаю, вы указываете ссылку на страницу, содержащую видеоролик, а он автоматически будет размещен в посте. Поддерживаются сервисы YouTube, Google Video, PollDaddy и DailyMotion. Теоретически эта опция должна также работать и с другими проектами, поддерживающими стандарт oEmbed, а это еще Flickr, Vimeo, Viddler, Qik, и Hulu.
  • register_theme_directory() – плагины могут добавлять дополнительные директории для шаблонов, то есть по идее какая-то тема, может содержать в себе еще несколько тем/шаблонов.

Конечно, в WordPress 2.9 добавят множество других изменений (в том числе и для админки), там будет оптимизирован код, удалены ненужные его повторения и т.п. и т.д. В любом случае будет интересно попробовать новую версию, ну и пусть разработчики не дремают, а думают над следующими улучшениями:)

P.S. Постовой. Гостиницы и отели петербурга по доступным ценам.
Раскрутка сайта и контекстная реклама, seo компания.

Понравился пост? Подпишись на обновления блога по RSS для блоггеров и вебмастеровRSS, RSS для блоггеров и вебмастеровEmail или RSS для блоггеров и вебмастеровtwitter!

Древовидные комментарии wordpress, wp_list_comments

Tuesday, 18 Aug 09 в 23:42

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

Итак, появилась эта фишка в wordpress начиная с версии 2.7., правда далеко не все темы оказались к этому готовы, поэтому львиную часть времени занимает правка шаблона. Но перед этим древовидные комментарии нужно активировать в админке – идем в раздел «Параметры» – «Обсуждение», где ставим галочку напротив поля «Разрешить древовидные (вложенные) комментарии глубиной  уровней» – на английском это «Enable threaded (nested) comments  levels deep». При этом указываем количество уровней, для которого можно отвечать на комментарий.

Если после этого в вашем блоге в комментариях не появилась ссылка «Оветить» (Reply), то, увы, шаблон такой вид комментариев не поддерживает. В таком случае нам придется править файл comments.php. Проще всего найти шаблон, который правильно работает с древовидными комментариям либо поиска и в Интернете нужный фрагмент кода. Я нашел подсказку в этой статье. Если вы хотите создать шаблон для всех версий wordpress, то нужно делать проверку поддерживается ли в той или иной установке функция wp_list_comments – для этого создается 2 варианта шаблона и добавляете условный оператор if в код (см. статью). У меня все гораздо проще – wordpress версии 2.8., поэтому лишние действия смысла делать нет.

В самом начале не забудьте сохранить резервную копию файла comments.php на всякий случай. Дальше заходим в header.php, где перед вызовом функции wp_head() добавляем код:

if ( is_singular() ) wp_enqueue_script( 'comment-reply' );

Это добавит небольшую функциональность с помощью javascript в комментарии – судя по наблюдениям, форма для комментирования будет отображаться сразу после записи, где вы нажали «Ответить». Далее в файл comments.php записываем код:

<div id="comments-wrap">
<?php // Do not delete these lines
	if (!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
		die ('Please do not load this page directly. Thanks!');
 
	if ( post_password_required() ) { ?>
		<p class="nocomments">This post is password protected. Enter the password to view comments.</p>
	<?php
		return;
	}
?>
 
<!-- You can start editing here. -->
<?php // Begin Comments & Trackbacks ?>
<?php if ( have_comments() ) : ?>
<h6 id="comments-wrap"><?php comments_number('No Comments', 'One Comments', '% Comments' );?> to &#8220;<?php 
 
the_title(); ?>&#8221;</h6>
	<div class="navigation">
		<div class="alignleft"><?php previous_comments_link() ?></div>
		<div class="alignright"><?php next_comments_link() ?></div>
	</div>
<ol class="commentlist">
	<?php wp_list_comments(); ?>
</ol>
	<div class="navigation">
		<div class="alignleft"><?php previous_comments_link() ?></div>
		<div class="alignright"><?php next_comments_link() ?></div>
</div>
<?php // End Comments ?>
 
 <?php else : // this is displayed if there are no comments so far ?>
 
	<?php if ('open' == $post->comment_status) : ?>
		<!-- If comments are open, but there are no comments. -->
 
	 <?php else : // comments are closed ?>
		<!-- If comments are closed. -->
		<p><?php _e('Sorry, the comment form is closed at this time.'); ?></p>
 
	<?php endif; ?>
<?php endif; ?>
 
<?php if ('open' == $post->comment_status) : ?>
 
<div id="respond">
 
<h4 class="postcomment"><?php comment_form_title( 'Leave a Reply', 'Leave a Reply to %s' ); ?></h4>
 
<div class="cancel-comment-reply">
	<small><?php cancel_comment_reply_link(); ?></small>
</div>
 
<?php if ( get_option('comment_registration') && !$user_ID ) : ?>
<p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php echo urlencode
 
(get_permalink()); ?>">logged in</a> to post a comment.</p>
 
<?php else : ?>
 
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
 
	<?php if ( $user_ID ) : ?>
 
<p>Logged in as <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>. 
 
<a href="<?php echo wp_logout_url(get_permalink()); ?>" title="Log out of this account">Log out &raquo;</a></p>
 
	<?php else : ?>
 
	<p>
	<input type="text" name="author" id="author" class="textarea" value="<?php echo $comment_author; ?>" size="28" 
 
tabindex="1" />
	<label for="author"><?php _e('Name'); ?></label> <?php if ($req) _e('(required)'); ?>
	</p>
 
	<p>
	<input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="28" tabindex="2" 
 
class="textarea" />
	<label for="email"><?php _e('E-mail'); ?></label> <?php if ($req) _e('(required)'); ?>
	</p>
 
	<p>
	<input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="28" tabindex="3" 
 
class="textarea" />
	<label for="url"><?php _e('<acronym title="Uniform Resource Identifier">URI</acronym>'); ?></label>
	</p>
 
	<?php endif; ?>
 
	<p>
	<label for="comment"><?php _e('Your Comment'); ?></label>
	<br />
	<textarea name="comment" id="comment" cols="60" rows="10" tabindex="4" class="textarea"></textarea>
	</p>
 
	<p>
	<input name="submit" id="submit" type="submit" tabindex="5" value="<?php _e('submit'); ?>" class="Cbutton" />
	<?php comment_id_fields(); ?>
	</p>
	<?php do_action('comment_form', $post->ID); ?>
</form>
<?php endif; ?>
</div>
<?php else : // Comments are closed ?>
<p><?php _e('Sorry, the comment form is closed at this time.'); ?></p>
<?php endif; ?>
</div>

Еще нужно будет добавить в файл стилей несколько строк:

.alt {margin: 0;padding: 10px;}
#comments ol {list-style-type: none;line-height: 18px;margin-top: 0px;margin-right: 0px;margin-bottom: 0px;margin-left: 0px;padding-top: 0px;padding-right: 0px;padding-bottom: 10px;padding-left: 5px;}
#comments ul li {list-style-type: none;list-style-image: none;list-style-position: outside;margin-top: 0px;margin-right: 0px;margin-bottom: 0px;margin-left: 5px;padding-top: 5px;padding-right: 0px;padding-bottom: 0px;padding-left: 0pt;}
.commentlist {padding: 0;text-align: justify;}
.commentlist li {margin: 15px 0 10px;padding: 5px 5px 10px 5px;list-style: none;}
.commentlist li ul li { margin-right: -5px;margin-left: 10px;list-style: none;}
.commentlist li li {background:none;border:none;list-style:none;margin:3px 0 3px 20px;padding:3px 0;}
.commentlist li .avatar {border:1px solid #ccc;margin:15px 8px 6px 0;float: right;padding:2px;width:45px;height:45px;}
.commentlist cite, .commentlist cite a {font-weight: bold;font-style: normal;font-size: 1.1em;}
.commentlist p {font-weight: normal;line-height: 1.5em;text-transform: none; margin: 10px 5px 10px 0;}
#commentform p {font-family: 'Lucida Grande', Verdana, Arial, Sans-Serif;}
.commentmetadata {font-weight: normal; margin: 0;display: block; color: #ca5433;}
.commentmetadata a, .commentmetadata a:visited {color: #fa7703;}
.commentmetadata a:hover{ color: #333333;}
.children { padding: 0; }
.thread-alt {background-color: #f8f8f8;}
.thread-even {background-color: white;}
.depth-1 {border: 1px solid #ddd;}
.even, .alt {border-left: 1px solid #ddd;}

Понятно, что их можно изменять и подправить под дизайн вашего блога. После сохранения все должно работать. У Дмитрия Донченко есть статья про древовидные комментарии, где он подробно разбирает некоторые части кода для comments.php, что может прояснить некоторые моменты, если это очень интересно для вас.

Функция wp_list_comments

В версиях wordpress старше 2.7 данная функция отвечает за вывод списка комментариев.

<ol class="commentlist">
<?php wp_list_comments(); ?>
</ol>

Проблема в том, что править формат вывода через шаблон оказалось не так просто. Тем не менее, есть 2 варианта решения данной проблемы – во-первых, вы можете указывать стиль вывода комментариев – с помощью div, ol или ul, а через CSS уже внедрять свои фантазии офомления. Например:

<div class="commentlist">
<?php wp_list_comments(array('style' => 'div')); ?>
</div>

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

<ol class="commentlist">
<?php wp_list_comments('callback=mytheme_comment'); ?>
</ol>

А в файле  functions.php его необходимо определить. Вот пример из одного блога.

<?php
function mytheme_comment($comment, $args, $depth) {
   $GLOBALS['comment'] = $comment; ?>
     <div id="comment-<?php comment_ID(); ?>" class="mycomment">
      <table><tbody><tr><td width="80" valign="top" >
	  <div class="comment-author vcard">
         <?php echo get_avatar($comment,$size='48',$default='<path_to_url>' ); ?>       
      </div>
	  </td><td width="100%" valign="top" style="padding-left: 10px;">
 
      <?php if ($comment->comment_approved == '0') : ?>
         <em><?php _e('Your comment is awaiting moderation.') ?></em>
         <br />
      <?php endif; ?>
 
      <div class="comment-meta commentmetadata"> <?php printf(__('<cite class="fn">%s</cite>'), get_comment_author_link()) ?> пишет <a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(),  get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),'  ','') ?></div>
 
      <?php comment_text() ?>
 
      <div class="reply">
         <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
      </div>
	  </td></tr></table>
     </div>
 
<?php
        }
?>

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

P.S. Постовой. Заходми в блог юного SEOшника и читаем про Фарму, дорвеи, black seo!

Понравился пост? Подпишись на обновления блога по RSS для блоггеров и вебмастеровRSS, RSS для блоггеров и вебмастеровEmail или RSS для блоггеров и вебмастеровtwitter!
Страница 5 из 15« Первая...2345678...Последняя »