在使用_Author挂钩时,如何确定生成对`the_Author()`的每次调用的PHP文件?

时间:2020-01-28 作者:cag8f

the_author() filter hook 可用于修改的输出the_author(). 使用钩子时,是否可以知道哪个PHP文件生成对the_author()?

例如,假设我将此自定义函数附加到the_author() 过滤器挂钩,用于修改the_author() 输出:

add_filter("the_author", "change_author");
function change_author($author) {
    $author = "NEW AUTHOR!";

    return $author;
}
当我加载页面时,我可以在5个单独的部分中看到此更改:

头文件中有一次(来自文件header.php)在我的功能中change_author(), 有没有办法知道哪个PHP文件当前正在调用the_author()?

我这样问的动机是因为我只想更改某些章节的作者,即仅在the_author() 从特定文件(my\\u file.php)调用。对于the_author() 我想让输出不受干扰。我只是想知道使用the_author() 过滤器挂钩。

2 个回复
最合适的回答,由SO网友:Tim Elsass 整理而成

您可以使用debug_backtrace 在PHP中,它将为您提供调用的函数和从中调用的文件的回溯。WP core提供wp_debug_backtrace_summary, 这样做更容易。使用问题中所述的条件my_file.php 您可以这样做:

add_filter( \'the_author\', \'change_author\' );
function change_author($author) {
    if ( false !== strpos( wp_debug_backtrace_summary(), \'my_file.php\' ) ) {
        $author = "NEW AUTHOR!";
    }

    return $author;
}
不将任何参数传递给wp_debug_backtrace_summary 它将以字符串形式输出摘要。那我们就用strpos 检查是否my_file.php 作为调用文件包含在输出中,并进行更改。

正如其他人所提到的,这可能不是最好的方法,但很容易做到。

SO网友:Jacob Peattie

根据您的评论:

当然,我可以试着用你描述的术语来解释。“我的主题”在每个帖子的底部显示“特色帖子”部分。它通过一个主题文件来实现:related_posts.php. 在其中,它显示了一些帖子的作者,每次使用the_author(). 我想返回一个空白字符串the_authoer() 在每种情况下。这有意义吗?

您可以使用普通模板标记来实现这一点。我们可以按照以下逻辑实现它:

如果我们正在查看单个帖子the_author() 功能正在用于当前单个职位以外的任何其他职位

我们之所以能这样做是因为get_the_ID() 将返回其作者正在显示的帖子的帖子ID,而get_queried_object_id() 将获取正在显示的完整帖子的ID,无论我们在哪里使用它。所以我们只需要比较一下:

add_filter(
    \'the_author\',
    function( $author ) {
        // We only want our filter to affect single post views.
        if ( is_single() ) {
            // If the author is being displayed for any post other than the current post.
            if ( get_the_ID() !== get_queried_object_id() ) {
                $author = \'\';
            }
        }

        return $author
    }
);
不过,您需要考虑的一件事是,如果主题在作者名称周围输出标记,那么仍然会输出标记。唯一的删除方法是修改模板。

相关推荐

Single.php中按标签显示的WordPress相关帖子

我想创建一个相关的帖子,但我尝试的代码只显示使用第一个标记的相关帖子。我想要使用所有标签的相关帖子(因为我的网站是一个博客,每篇文章最多可以有(最多)5个标签)我想根据第一个标签显示相关帖子,然后使用其他(最多5个)标签显示的代码没有按预期工作,怎么了?$tags = wp_get_post_tags($post->ID); if ($tags) { echo \'Related Posts\'; $first_tag = $tags[0]->term_