每x条评论的附加内容

时间:2017-01-04 作者:Michal K

你知道有没有可能在WordPress中每隔5条评论添加一些内容?我可以使用“更多字段”插件,但它会在每条评论后创建内容。类似于包含广告的回复,除了WordPress,在PhpBB中每5个论坛回复都会出现一次。

e、 g。

- comment 1  
- comment 2  
- ...  
- comment 5  
- MY CONTENT    
- comment 6  
- ... 
- comment 10  
- MY CONTENT
- comment 11

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

以下是一种使用以下自定义输入参数的方法:

wp_list_comments( [
    \'_inject_period\'  => 5,
    \'_inject_content\' => [ \'AAA\', \'BBB\', \'CCC\' ],
] );
在这里,我们设置注入周期并定义要注入的内容。

以下扩展\\Walker_Comment 分类并增强start_el() 方法:

<?php
/**
 * Plugin Name: Comment Content Injector
 * Plugin URI:  https://wordpress.stackexchange.com/a/251247/26350
 */

add_filter( \'wp_list_comments_args\', function( $args )
{   
    // Period - Validation
    if( 
           ! isset( $args[\'_inject_period\'] ) 
        || ! is_int( $args[\'_inject_period\'] )   
        || 0 === $args[\'_inject_period\']  
    )
        return $args;

    // Content - Validation
    if( 
           ! isset( $args[\'_inject_content\'] ) 
        || ! is_array( $args[\'_inject_content\'] ) 
    )
        return $args;

    // Custom Walker
    $args[\'walker\'] = new class extends \\Walker_Comment
    {
        public function start_el( &$output, $comment, $depth=0, $args=array(), $id=0 )
        {
            static $instance = 0;
            static $key      = 0;

            $tag = ( \'div\' == $args[\'style\'] ) ? \'div\' : \'li\'; // see Walker_Comment

            // Inject custom content periodically
            if( 
                0 == ++$instance % absint( $args[\'_inject_period\'] ) 
                && isset( $args[\'_inject_content\'][$key] ) 
            ) {
                $output .= sprintf( 
                   \'<%s class="injected">%s</%s>\', 
                   $tag, 
                   $args[\'_inject_content\'][$key], 
                   $tag 
                );
                $key++;
            }

            // Parent method
            parent::start_el( $output, $comment, $depth, $args, $id );
        }
    };

    return $args;
} );
我们还可能希望通过检查$depth 变量我们也可以在父方法之后注入它,但目前是在之前。

注意,这里我们使用匿名类。Here\'s 有关如何在没有它的情况下扩展它的更多信息。

另一种方法是使用comments_array 筛选,或者如果使用自定义回调,请根据需要进行调整。

希望您能根据需要进一步调整!