用于检查函数是否已返回HTML标记的条件

时间:2017-01-24 15:21:08

标签: php wordpress function

我有一个条件语句,当true时显示一些<nav>标记,里面有一个paginate_comments_links函数,它返回包含注释的页面的html链接。

<?php
if( ( $is_comments_pagination == true ) ) { ?>
    <nav class="pagination">
        <?php
        $args = array(
            'prev_text' => '&larr;',
            'next_text' => '&rarr;',
            '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,但函数是否存在 - 它根本不会返回任何内容。

2 个答案:

答案 0 :(得分:3)

我认为paginate_comments_links($args);会直接echo分页内容。 因此,您可以使用Output Control将函数的结果放入缓冲区,获取缓冲区内容,然后检查是否为空。 如果您要显示某些内容,请将其包装在导航标记之间并显示它。

if (($is_comments_pagination == true)) {
    $args = array(
        'prev_text' => '&larr;',
        'next_text' => '&rarr;',
        '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_startob_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' => '&larr;',
        'next_text' => '&rarr;',
        'type'      => 'list',
        'echo'      => false
    );
    $content = paginate_comments_links($args);
    if (strlen($content) > 0)) {
        echo "<nav class=\"pagination\">$content</nav>";
    }
}