如何在 Wordpress 中显示带有简码的 comments_template?
How to display the comments_template with a shortcode, in Wordpress?
我使用下面的代码设法显示带有短代码的 comment_form(同时将其从默认位置删除):
`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 );
birgire 在这个答案中建议的代码:https://wordpress.stackexchange.com/a/177289/26350
为了更清楚,这里是我想要得到的地方:我需要通过短代码在不同的位置显示评论表单和评论列表。我设法模仿上面的相同代码来显示 comments_template(后来编辑 comments.php 以从中删除 comment_form,因为我真正需要显示的是评论列表)但是评论列表显示 2x,一个在短代码位置,一个在 post(默认位置)的底部。我尝试使用相同的代码独立显示 wp_list_comments 但没有成功。
如果您不提供评论数组 wo wp_list_comments,那么它会发现查询已经完成(即在循环中)。
如果您想独立于循环显示 post 的评论,您可以使用类似的东西:
$comments = get_comments( array( 'post_id' => $id ) );
wp_list_comments( array( 'per_page' => how many to show ), $comments);
因此,要将其放入短代码中,您可以执行以下操作(未测试):
add_shortcode( 'wpse_comment_list', function( $atts = array(), $content = '' )
{
if( isset($atts['id']) && post_type_supports( $atts['id'], 'comments' ) )
{
ob_start();
$comments = get_comments( array( 'post_id' => $atts['id'] ) );
wp_list_comments( array( 'per_page' => how many to show ), $comments);
return ob_get_clean();
}
return '';
}, 10, 2 );
你可以用 [wpse_comment_list id="33"]
(或任何 id)来调用它。
我设法得到了我需要的结果,但部分是通过在我的子主题上删除我无法通过代码删除的部分。
我模仿了用于简码显示 comment_form (问题上方)的代码,以简码显示 comments_template (下方)。它在我需要的地方显示它,但它没有像以前的代码对 comment_form 所做的那样从 post 的底部删除它的 "ghost"。所以我将 single.php 复制到我的子主题并删除了所有这些:
<?php
`// If comments are open or we have at least one, load up
the comment template
if ( comments_open() || '0' != get_comments_number() )
comments_template( '', true );
?>
成功了。虽然不确定这是最好的方法,但我对此很好奇。我不再需要 post 底部的评论;我的评论表单现在是一种不同的表单,并且也有不同的位置,以防这是唯一的问题。
这是我用来简码显示 comments_template 的代码。我需要它只显示评论而不是表格,所以我从我的子主题中的 comments.php 中删除了 comments_form 调用。
add_shortcode( 'wpse_comments_template', function( $atts = array(), $content = '' )
{
if( is_singular() && post_type_supports( get_post_type(), 'comments' ) )
{
ob_start();
comments_template();
print( '<style>#comments-title { display: none; }</style>' );
return ob_get_clean();
}
return '';
}, 10, 2 );
如果您是 运行 主题中此部分之前的 [wpse_comments_template]
简码:
<?php
if ( comments_open() || '0' != get_comments_number() )
comments_template( '', true );
?>
然后它正在尝试使用:
add_shortcode( 'wpse_comments_template', function( $atts = array(), $content = '' )
{
if( is_singular() && post_type_supports( get_post_type(), 'comments' ) )
{
ob_start();
comments_template();
add_filter( 'comments_open', '__return_false' );
add_filter( 'get_comments_number', '__return_zero' );
return ob_get_clean();
}
return '';
}, 10, 2 );
但这可能会干扰稍后出现的与评论相关的内容,例如在边栏中。
所以使用更准确:
/**
* Display the comment template with the [wpse_comments_template]
* shortcode on singular pages.
*
* @see
*/
add_shortcode( 'wpse_comments_template', function( $atts = array(), $content = '' )
{
if( is_singular() && post_type_supports( get_post_type(), 'comments' ) )
{
ob_start();
comments_template();
add_filter( 'comments_open', 'wpse_comments_open' );
add_filter( 'get_comments_number', 'wpse_comments_number' );
return ob_get_clean();
}
return '';
}, 10, 2 );
function wpse_comments_open( $open )
{
remove_filter( current_filter(), __FUNCTION__ );
return false;
}
function wpse_comments_number( $open )
{
remove_filter( current_filter(), __FUNCTION__ );
return 0;
}
而且您不必从主题中删除任何代码。
我在 2015 主题上对此进行了测试,它似乎按预期工作。
我使用下面的代码设法显示带有短代码的 comment_form(同时将其从默认位置删除):
`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 );
birgire 在这个答案中建议的代码:https://wordpress.stackexchange.com/a/177289/26350
为了更清楚,这里是我想要得到的地方:我需要通过短代码在不同的位置显示评论表单和评论列表。我设法模仿上面的相同代码来显示 comments_template(后来编辑 comments.php 以从中删除 comment_form,因为我真正需要显示的是评论列表)但是评论列表显示 2x,一个在短代码位置,一个在 post(默认位置)的底部。我尝试使用相同的代码独立显示 wp_list_comments 但没有成功。
如果您不提供评论数组 wo wp_list_comments,那么它会发现查询已经完成(即在循环中)。
如果您想独立于循环显示 post 的评论,您可以使用类似的东西:
$comments = get_comments( array( 'post_id' => $id ) );
wp_list_comments( array( 'per_page' => how many to show ), $comments);
因此,要将其放入短代码中,您可以执行以下操作(未测试):
add_shortcode( 'wpse_comment_list', function( $atts = array(), $content = '' )
{
if( isset($atts['id']) && post_type_supports( $atts['id'], 'comments' ) )
{
ob_start();
$comments = get_comments( array( 'post_id' => $atts['id'] ) );
wp_list_comments( array( 'per_page' => how many to show ), $comments);
return ob_get_clean();
}
return '';
}, 10, 2 );
你可以用 [wpse_comment_list id="33"]
(或任何 id)来调用它。
我设法得到了我需要的结果,但部分是通过在我的子主题上删除我无法通过代码删除的部分。 我模仿了用于简码显示 comment_form (问题上方)的代码,以简码显示 comments_template (下方)。它在我需要的地方显示它,但它没有像以前的代码对 comment_form 所做的那样从 post 的底部删除它的 "ghost"。所以我将 single.php 复制到我的子主题并删除了所有这些:
<?php
`// If comments are open or we have at least one, load up
the comment template
if ( comments_open() || '0' != get_comments_number() )
comments_template( '', true );
?>
成功了。虽然不确定这是最好的方法,但我对此很好奇。我不再需要 post 底部的评论;我的评论表单现在是一种不同的表单,并且也有不同的位置,以防这是唯一的问题。
这是我用来简码显示 comments_template 的代码。我需要它只显示评论而不是表格,所以我从我的子主题中的 comments.php 中删除了 comments_form 调用。
add_shortcode( 'wpse_comments_template', function( $atts = array(), $content = '' )
{
if( is_singular() && post_type_supports( get_post_type(), 'comments' ) )
{
ob_start();
comments_template();
print( '<style>#comments-title { display: none; }</style>' );
return ob_get_clean();
}
return '';
}, 10, 2 );
如果您是 运行 主题中此部分之前的 [wpse_comments_template]
简码:
<?php
if ( comments_open() || '0' != get_comments_number() )
comments_template( '', true );
?>
然后它正在尝试使用:
add_shortcode( 'wpse_comments_template', function( $atts = array(), $content = '' )
{
if( is_singular() && post_type_supports( get_post_type(), 'comments' ) )
{
ob_start();
comments_template();
add_filter( 'comments_open', '__return_false' );
add_filter( 'get_comments_number', '__return_zero' );
return ob_get_clean();
}
return '';
}, 10, 2 );
但这可能会干扰稍后出现的与评论相关的内容,例如在边栏中。
所以使用更准确:
/**
* Display the comment template with the [wpse_comments_template]
* shortcode on singular pages.
*
* @see
*/
add_shortcode( 'wpse_comments_template', function( $atts = array(), $content = '' )
{
if( is_singular() && post_type_supports( get_post_type(), 'comments' ) )
{
ob_start();
comments_template();
add_filter( 'comments_open', 'wpse_comments_open' );
add_filter( 'get_comments_number', 'wpse_comments_number' );
return ob_get_clean();
}
return '';
}, 10, 2 );
function wpse_comments_open( $open )
{
remove_filter( current_filter(), __FUNCTION__ );
return false;
}
function wpse_comments_number( $open )
{
remove_filter( current_filter(), __FUNCTION__ );
return 0;
}
而且您不必从主题中删除任何代码。
我在 2015 主题上对此进行了测试,它似乎按预期工作。