如何显示Disqus评论和Pingback?

时间:2013-11-25 作者:warren

我使用 处理我博客上的评论。

我还喜欢从不同的帖子中来回使用pingback(以及从外部来源)。

然而,我今天注意到,虽然帖子底部的评论计数将显示“评论”(包括pingback)的总数,但实际上只显示了discus评论。

如何让pingback显示以及discus评论?

2 个回复
最合适的回答,由SO网友:birgire 整理而成

你提到的插件只是一个单一的功能,所以它不应该对你的设置太重。它使用comments_template 筛选以将pingbacks列表注入页面。

但是插件使用了额外的手动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 回调,但据我所知,二十点十三和二十点十四主题没有使用这样的回调。

这个$type => \'pings\' 输入参数很重要,因为它过滤掉了除pingbacks和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
然后可以根据需要调整布局。

下面是实施此解决方案的输出示例:

pings with 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

我希望这有帮助。

SO网友:Brad Dalton

这将在取消评论表之前显示它们,但不显示计数

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 );

结束

相关推荐

Change Taxonomy Permalinks

我有自定义帖子,我创建了一个显示所有自定义帖子的页面。示例:www.example.com/archive-page我想知道是否可以更改与此自定义帖子相关的类别和标签的永久链接。现在我有:www.example.com/my-custom-post-type-cats/my-category-1www.example.com/my-custom-post-type-tags/my-tag-1</我想要这样的东西:www.example.com/archive-page?category=1www.e