我有一个条件语句,当true时显示一些<nav>
标记,里面有一个paginate_comments_links函数,它返回包含注释的页面的html链接。
<?php
if( ( $is_comments_pagination == true ) ) { ?>
<nav class="pagination">
<?php
$args = array(
'prev_text' => '←',
'next_text' => '→',
'type' => 'list',
);
paginate_comments_links($args);
?>
</nav>
<?php } ?>
这样做 - 但如果没有评论页面,那么<nav>
标记将保留。如果没有评论页面,我不想要<nav>
标记。
但是,我似乎无法弄清楚如何检查paginate_comments_links是否正在返回标记并在条件中使用该标记。
我试过了:
if( ( $is_comments_pagination == true ) && ( paginate_comments_links() ) ) { ?>
这会立即执行该功能,我也尝试过:
if( ( $is_comments_pagination == true ) && ( isset(paginate_comments_links()) ) ) { ?>
然后调试器告诉我检查函数是否为null,但函数是否存在 - 它根本不会返回任何内容。
答案 0 :(得分:3)
我认为paginate_comments_links($args);
会直接echo
分页内容。
因此,您可以使用Output Control将函数的结果放入缓冲区,获取缓冲区内容,然后检查是否为空。
如果您要显示某些内容,请将其包装在导航标记之间并显示它。
if (($is_comments_pagination == true)) {
$args = array(
'prev_text' => '←',
'next_text' => '→',
'type' => 'list',
);
ob_start();
paginate_comments_links($args);
$content = ob_get_clean();
if (strlen($content) > 0)) {
echo "<nav class=\"pagination\">$content</nav>";
}
}
答案 1 :(得分:2)
Sir MacPotato's answer有效,但我认为ob_start
和ob_get_clean
是一种肮脏的黑客行为。
您可以选择调用paginate_comments_links(array('echo' => false))
,代码不会自动回显内容,HTML会以字符串形式返回,您可以自己回复。见https://codex.wordpress.org/Function_Reference/paginate_comments_links#Return_Values
if (($is_comments_pagination == true)) {
$args = array(
'prev_text' => '←',
'next_text' => '→',
'type' => 'list',
'echo' => false
);
$content = paginate_comments_links($args);
if (strlen($content) > 0)) {
echo "<nav class=\"pagination\">$content</nav>";
}
}