以下是一种使用以下自定义输入参数的方法:
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
筛选,或者如果使用自定义回调,请根据需要进行调整。
希望您能根据需要进一步调整!