如何显示带有快捷码的COMMENT_FORM,同时将其从默认位置移除?

时间:2015-02-05 作者:rodrigo nomada

我已经能够使用此代码在帖子内容区域中显示评论表单,这允许我使用[wpsites\\u comment\\u form]快捷码:

add_shortcode( \'wpsites_comment_form\', \'wpsites_comment_form_shortcode\' );
function wpsites_comment_form_shortcode() {
    ob_start();
    comment_form();
    $cform = ob_get_contents();
    ob_end_clean();
    return $cform;
} 
我需要的是从帖子底部删除评论表单(默认显示)。当我通过Posts-Edit-Comments-not Allow中的管理面板删除它时,它也会从通过shortcode函数显示的位置删除。那么,如何才能使其仅显示在放置短代码的位置?

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

版本#1

以下内容似乎适用于“二十一五”主题:

/**
 * Display the comment form via shortcode on singular pages
 * Remove the default comment form.
 * Hide the unwanted "Comments are closed" message with CSS.
 *
 * @see http://wordpress.stackexchange.com/a/177289/26350
 */

add_shortcode( \'wpse_comment_form\', function( $atts = array(), $content = \'\' )
{
    if( is_singular() && post_type_supports( get_post_type(), \'comments\' ) )
    {
        ob_start();
        comment_form();
        print(  \'<style>.no-comments { display: none; }</style>\' );
        add_filter( \'comments_open\', \'__return_false\' );
        return ob_get_clean();
    }
    return \'\';
}, 10, 2 );
在这里,我们只允许短代码在支持评论的单条帖子上显示评论表单。

在这里,我们使用CSS隐藏不需要的注释已关闭的消息。

版本#2

以下是另一种没有CSS的方法:

/**
 * Display the comment form via shortcode on singular pages.
 * Remove the default comment form.
 * Hide the unwanted "Comments are closed" message through filters.
 *
 * @see http://wordpress.stackexchange.com/a/177289/26350
 */

add_shortcode( \'wpse_comment_form\', function( $atts = array(), $content = \'\' )
{
    if( is_singular() && post_type_supports( get_post_type(), \'comments\' ) )
    {
        ob_start();
        comment_form();
        add_filter( \'comment_form_defaults\', \'wpse_comment_form_defaults\' );
        return ob_get_clean();
    }           
    return \'\';
}, 10, 2 );

function wpse_comment_form_defaults( $defaults )
{
    add_filter( \'comments_open\', \'wpse_comments_open\' );
    remove_filter( current_filter(), __FUNCTION__ );
    return $defaults;
}

function wpse_comments_open( $open )
{
    remove_filter( current_filter(), __FUNCTION__ );
    return false;
}

结束

相关推荐

Remove echo from shortcode

我刚刚开始使用短代码,由于缺乏php知识,我无法想出如何在不使用php echo的情况下使用此短代码。有人能帮我修改代码吗?// SPONSORS Shorcode function sponsors_shortcode($atts) { extract(shortcode_atts(array( \"name\" => \"sponsors\", ), $atts)); $args = array( \"