
Поставил себе на блог систему комментирования Disqus. Для wordpress нужно только скачать плагин и зарегистрироваться на сайте. Для работы Disqus подменяет форматирование комментариев и dofollow перестает работать, пришлось лезть сначала в Google, а потом в код плагина.
В гугле было пару советов, но все они так или иначе требовали изменения в коде плагина. Я такое делать не люблю, так как при обновлении все изменения затираются.
Исследование кода плагина Disqus
К сожалению найти хуки в плагине не удалось, но зато был найден полезный кусок кода
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | add_filter('comments_template', 'dsq_comments_template'); function dsq_comments_template($value) { global $EMBED; global $post; global $comments; if ( !( is_singular() && ( have_comments() || 'open' == $post->comment_status ) ) ) { return; } if ( !dsq_is_installed() || !dsq_can_replace() ) { return $value; } // TODO: If a disqus-comments.php is found in the current template's // path, use that instead of the default bundled comments.php //return TEMPLATEPATH . '/disqus-comments.php'; $EMBED = true; return dirname(__FILE__) . '/comments.php'; } |
Этот кусок кода подменяет шаблон комментариев темы на шаблон в папке плагина. А самой интересной частью является закомментированный кусок, в будущем автор плагина собирается проверять наличие в папке темы шаблона комментариев disqus-comments.php, и если он есть, то использовать его.
Пока автор планирует, мы начинаем использовать.
Создание своего фильтра
Чтобы заставить wordpress использовать наш собственный шаблон комментариев вставляем в файл functions.php нашей темы такой код
1 2 3 4 5 | function disq_comm($value) { return TEMPLATEPATH . '/disqus-comments.php'; } add_filter('comments_template', 'disq_comm'); |
Осталось только создать файл disqus-comments.php в каталоге активной темы.
disqus-comments.php
Фактически я скопировал файлик comments.php из папки плагина дискуса, переименовал его и внес свои изменения, которые активируют dofollow для хороших комментаторов.
В начале я изменил 20-ю строку, а именно условие comment_author_url() поменял на get_comment_author_url()!=” Это позволяет условию срабатывать.
Теперь возьмемся за саму ссылку
1 2 3 4 5 6 7 8 9 10 11 | <?php if(get_comment_author_url()!='') : { $authorlink=get_comment_author_link(); if (strpos($authorlink, 'nofollow') !== false) { $pos = strpos($authorlink, 'href'); $authorlink = substr($authorlink,0,$pos ). "terget='_blank' href='http://tigors.net/goto/". substr($authorlink, $pos+6); } } ?> <a id="dsq-author-user-<?php echo comment_ID(); ?>" href="<?php if (strpos($authorlink, 'nofollow') !== false){echo 'http://tigors.net/goto/'.get_comment_author_url().'" rel="nofollow"';} else { comment_author_url().'"';} ?> target="_blank"><?php echo comment_author(); ?></a> |
Весь смысл этой конструкции в том, что если в ссылке есть nofollow, то ссылка выводится через редирект http://tigors.net/goto/ссылка. За управление наличием nofollow отвечает плагин SMu DoFollow.
Для ленивых привожу полный текст моего файла disqus-comments.php, главное не забудьте убрать в строке редиректа мой адрес.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | <?php if (DISQUS_DEBUG) { echo "<p><strong>Disqus Debug</strong> thread_id: ".get_post_meta($post->ID, 'dsq_thread_id', true)."</p>"; } ?> <div id="disqus_thread"> <?php if (!get_option('disqus_disable_ssr')): ?> <?php // if (is_file(TEMPLATEPATH . '/comments.php')) { // include(TEMPLATEPATH . '/comments.php'); // } ?> <div id="dsq-content"> <ul id="dsq-comments"> <?php foreach ($comments as $comment) : ?> <li id="dsq-comment-<?php echo comment_ID(); ?>"> <div id="dsq-comment-header-<?php echo comment_ID(); ?>"> <cite id="dsq-cite-<?php echo comment_ID(); ?>"> <?php if(get_comment_author_url()!='') : { $authorlink=get_comment_author_link(); if (strpos($authorlink, 'nofollow') !== false) { $pos = strpos($authorlink, 'href'); $authorlink = substr($authorlink,0,$pos ). "terget='_blank' href='http://tigors.net/goto/". substr($authorlink, $pos+6); } } ?> <a id="dsq-author-user-<?php echo comment_ID(); ?>" href="<?php if (strpos($authorlink, 'nofollow') !== false){echo 'http://tigors.net/goto/'.get_comment_author_url().'" rel="nofollow"';} else { echo comment_author_url().'"';} ?> target="_blank"><?php echo comment_author(); ?></a> <?php else : ?> <span abraka id="dsq-author-user-<?php echo comment_ID(); ?>"><?php echo comment_author(); ?></span> <?php endif; ?> </cite> </div> <div id="dsq-comment-body-<?php echo comment_ID(); ?>"> <div id="dsq-comment-message-<?php echo comment_ID(); ?>"><?php echo wp_filter_kses(comment_text()); ?></div> </div> </li> <?php endforeach; ?> </ul> </div> <?php endif; ?> </div> <script type="text/javascript"> var disqus_url = '<?php echo get_permalink(); ?>'; var disqus_identifier = '<?php echo dsq_identifier_for_post($post); ?>'; var disqus_container_id = 'disqus_thread'; var disqus_domain = '<?php echo DISQUS_DOMAIN; ?>'; var disqus_shortname = '<?php echo strtolower(get_option('disqus_forum_url')); ?>'; var disqus_title = <?php echo cf_json_encode(dsq_title_for_post($post)); ?>; <?php if (false && get_option('disqus_developer')): ?> var disqus_developer = 1; <?php endif; ?> var disqus_config = function () { var config = this; // Access to the config object /* All currently supported events: * preData — fires just before we request for initial data * preInit - fires after we get initial data but before we load any dependencies * onInit - fires when all dependencies are resolved but before dtpl template is rendered * afterRender - fires when template is rendered but before we show it * onReady - everything is done */ config.callbacks.preData.push(function() { // clear out the container (its filled for SEO/legacy purposes) document.getElementById(disqus_container_id).innerHTML = ''; }); <?php if (!get_option('disqus_manual_sync')): ?> config.callbacks.onReady.push(function() { // sync comments in the background so we don't block the page DISQUS.request.get('?cf_action=sync_comments&post_id=<?php echo $post->ID; ?>'); }); <?php endif; ?> <?php $sso = dsq_sso(); if ($sso) { foreach ($sso as $k=>$v) { echo "this.page.{$k} = '{$v}';\n"; } } ?> }; var facebookXdReceiverPath = '<?php echo DSQ_PLUGIN_URL . '/xd_receiver.htm' ?>'; </script> <script type="text/javascript"> var DsqLocal = { 'trackbacks': [ <?php $count = 0; foreach ($comments as $comment) { $comment_type = get_comment_type(); if ( $comment_type != 'comment' ) { if( $count ) { echo ','; } ?> { 'author_name': <?php echo cf_json_encode(get_comment_author()); ?>, 'author_url': <?php echo cf_json_encode(get_comment_author_url()); ?>, 'date': <?php echo cf_json_encode(get_comment_date('m/d/Y h:i A')); ?>, 'excerpt': <?php echo cf_json_encode(str_replace(array("\r\n", "\n", "\r"), '<br />', get_comment_excerpt())); ?>, 'type': <?php echo cf_json_encode($comment_type); ?> } <?php $count++; } } ?> ], 'trackback_url': <?php echo cf_json_encode(get_trackback_url()); ?> }; </script> <script type="text/javascript"> (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = 'http://' + disqus_shortname + '.' + disqus_domain + '/embed.js?pname=wordpress&pver=<?php echo DISQUS_VERSION; ?>'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })(); </script> |
Понравилась статья? Посоветуйте друзьям!
| | Tweet |
Понравилась статья? Подпишись на рассылку по E-Mail или в RSS.


English



