Intereting Posts
Когда WordPress не предоставляет файл .htaccess для новых многосайтовых сайтов из-за автоматического установщика CPanel Fantastico? Как изменить пользовательскую таксономию на радио кнопки Как отобразить более короткую версию wp_editor? Admin: как сделать кнопку фильтра пользовательского списка отправить GET queryvars Как получить значения из полей ввода администрирования woocommerce? Насколько безопасно / дезинфицировано wp_insert_posts ()? Есть ли способ связать пользовательские типы сообщений? XMLRPC: как получить возможные настраиваемые поля для нового сообщения? Как WordPress не включает / отключает плагин? Создание миниатюрных изображений небольшого размера из показанного изображения Возможны ли страницы архива категории или тега? Разрешить пользователю вводить короткий код в WordPress-виджет 418 статус заголовка, я чайник Как определить фильтр по URL-адресу на странице категории? Сайт WordPress кажется убежденным, что он все еще находится на своем старом URL-адресе

Как показать комментарии Disqus и pingbacks?

Я использую disqus для обработки комментариев в своем блоге.

Мне также нравится иметь pingbacks из разных сообщений взад и вперед друг к другу (и из внешних источников.

Тем не менее, я заметил сегодня, что, в то время как комментарий в нижней части сообщения покажет общее количество «комментариев» (включая pingback), на самом деле отображаются только комментарии Disqus.

Как я могу получить pingbacks, а также комментарии Disqus?

Плагин, который вы упомянули, является только одной функцией, поэтому он не должен быть слишком тяжелым для вашей установки. Он использует фильтр comments_template для ввода списка pingbacks / trackbacks на вашу страницу.

Но плагин использует дополнительный ручной SQL-запрос, и шаблон создается вручную, поэтому есть место для улучшений / упрощений.

Простой демонстрационный плагин с wp_list_comments() :

Вы можете попробовать например:

 <?php /** Plugin Name: Display a list of pingbacks and trackbacks with the Disqus plugin **/ add_filter( 'comments_template', function( $theme_template) { // Check if the Disqus plugin is installed: if( ! function_exists( 'dsq_is_installed' ) || ! dsq_is_installed() ) return $theme_template; // Comment callback: $callback = 'my_theme_comment'; // Adjust to your needs. if( ! function_exists( $callback ) ) $callback = null; // List comments with filters: $pings = wp_list_comments( array( 'callback' => $callback, 'type' => 'pings', 'style' => 'ol', 'echo' => 0 ) ); // Display: if( $pings ) printf( "<div><ol class=\"pings commentlist\">%s</ol></div>", $pings ); return $theme_template; }, 9 ); 

Если ваша тема использует обратный вызов, вы можете соответствующим образом скорректировать часть my_theme_comment . twentytwelve_comment тема Twenty Twelve использует twentytwelve_comment вызов twentytwelve_comment но темы Twenty Thirteen и twentytwelve_comment не используют такой обратный вызов.

Входной параметр $type => 'pings' имеет важное значение, поскольку он отфильтровывает каждый тип комментариев, кроме pingback и trackbacks .

Обратите внимание, что мы разрешаем wp_list_comments() выполнять всю сложную работу по настройке шаблона.

Модульное демонстрационное решение без wp_list_comments() :

Вы также можете отфильтровать пинги из фильтра comments_array с помощью:

 add_action( 'wp', function(){ // Check if the Disqus plugin is installed: if( function_exists( 'dsq_is_installed' ) && dsq_is_installed() ) { // Display the list of pings: $pings = new PingsList( new PingsView, new PingsData ); $pings->init(); } } ); 

где основной класс контейнера:

 class PingsList { protected $pd = null; protected $pw = null; public function __construct( PingsView $pw, PingsData $pd ) { $this->pw = $pw; $this->pd = $pd; } public function init() { $this->pd->init(); add_filter( 'comments_template', array( $this, 'comments_template' ), 9 ); } public function comments_template( $theme_template ) { $this->pw->template( $this->pd->get_data() ); return $theme_template ; } } // end class 

и источником данных является:

 interface IPingsData { public function init(); public function get_data(); } class PingsData implements IPingsData { protected $pings = array(); public function init( ) { add_filter( 'comments_array', array( $this, 'comments_array' ), 10, 2 ); } public function get_data() { return $this->pings; } public function comments_array( $comments, $post_id ) { foreach( $comments as $key => $comment ) { if( in_array( $comment->comment_type, array( 'pingback', 'trackback' ) ) ) { $this->pings[] = $comment; } } return $comments; } } // end class 

и макет определяется с помощью:

 interface IPingsView { public function template( $pings ); } class PingsView implements IPingsView { public function template( $pings = array() ) { ?> <div id="pings"> <h2><?php printf( __( 'Pingbacks/Trackbacks (%d)' ), count( $pings ) );?> </h2> <ol class="pings commentlist"> <?php foreach( $pings as $ping ): $GLOBALS['comment'] = $ping; ?> <li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>"> <p> <?php comment_author_link(); ?> <?php edit_comment_link( __( '(Edit)' ), '<span class="edit-link">', '</span>' ); ?> </p> <div class="comment-content"> <?php comment_text(); ?> </div> </li> <?php endforeach; ?> </ol> </div> <?php } } // end class 

Затем вы можете настроить макет в соответствии с вашими потребностями.

Ниже приведен пример вывода с реализованным решением:

пинг с disqus

Решение с дополнительным get_comments() :

Другой способ (с некоторыми дополнительными работами и запросами!) – это построить список, например:

 add_filter( 'comments_template', function( $theme_template) { $pings = get_comments( array( 'post_id' => get_the_ID(), 'type' => 'pings', 'status' => 'approve' ) ); foreach( (array) $pings as $ping ) { // ... output ... } return $theme_template; } , 9 ); 

где get_comments() является только оболочкой для класса WP_Comment_Query . Я бы, вероятно, не пошел по этому маршруту и ​​вместо этого использовал другие решения.

Вы также можете использовать класс WP_Comment_Query напрямую, но он не такой сложный, как класс WP_Query .

Надеюсь, это поможет.

Это отобразит их перед формой комментария DISQUS, но не будет счетчиком

 add_filter( 'comments_template', function( $pings_before_dsq_comments) { if( !function_exists( 'dsq_is_installed' ) || !dsq_is_installed() ) return $pings_before_dsq_comments; wp_list_comments( array( 'style' => 'ul', 'type' => 'pings' )); return $pings_before_dsq_comments; }, 9 );