如何用定制的超文本标记语言替换默认评论?

时间:2015-12-16 作者:Antonio

我将用Facebook的评论框替换默认的评论列表和评论表单。据我所知,有功能wp_list_comments(). 如何用自定义函数替换此函数?

Update: 我想完全忽略内置的WordPress评论。

当我尝试将代码添加到内容末尾时,它会起作用:

add_filter (\'the_content\', \'fbcommentbox\', 100);
但以下代码没有:

add_filter (\'comments_template\', \'fbcommentbox\', 100);

1 个回复
SO网友:birgire

请注意,在以下情况下:

add_filter (\'comments_template\', \'fbcommentbox\', 100);
我们期望fbcommentbox() 返回path 到新的注释模板文件。默认路径为comments.php.

如果您创建fbcommentbox.php 文件,然后您可以尝试:

add_filter( \'comments_template\', \'fbcommentbox\', 100);

function fbcommentbox( $theme_template )
{
    // Path to our new comment template file
    $new_theme_template = get_template_directory() . \'/fbcommentbox.php\';

    // Override if it exsits
    if( file_exists( $new_theme_template ) )
        $theme_template = $new_theme_template;

    return $theme_template;
}
如果文件fbcommentbox.php 不存在,则加载默认值。对于儿童主题,我们将使用get_stylesheet_directory().

以下是一个简短的版本:

function fbcommentbox( $theme_template )
{
    return locate_template( \'fbcommentbox.php\' );
}
其中locate_template() 做所有艰苦的工作。

更新,但您提到要覆盖wp_list_comments() 相反

这里有一种方法可以通过更改echo 参数到false:

add_filter( \'wp_list_comments_args\', function( $args )
{
    // Display fbcommentbox.php 
    get_template_part( \'fbcommentbox\' );

    // Disable output of wp_list_comments()
    $args[\'echo\'] = 0;

    return $args;
} );
和输出,而不是fbcommentbox.php 样板