这三个吊钩的操作顺序

时间:2016-04-12 作者:LPH

这三个钩子的射击顺序是什么?

    add_filter( \'comments_array\', array( $this, \'BuildCommentsArray\' ), 10, 2 );
    add_action( \'preprocess_comment\', array( $this, \'write\' ), 10, 1 );
    add_action( \'comment_post\', array( $this, \'add_meta\' ), 10, 1 );
这就是我试图实现的目标,但我得到了一个循环。

在BuildCommentsArray中,可以找到尚未写入WordPress的论坛帖子。将帖子写到WordPress评论,然后写到commentmeta。

 update_comment_meta( $comment_id, \'origin\', \'XenForo\');
preprocess\\u注释将新的WordPress注释写入论坛。有一个条件可以查找“origin”元值。如果没有出席,请写信给论坛。

comment\\u post使用post\\u id和thread\\u id信息将meta添加到WP注释中。

发生的事情是

论坛帖子被写入WordPress数据库

  • 虽然“起源”的元值在WordPress commentmeta中
  • 但是,一个新的论坛帖子是根据WordPress评论创建的,尽管“起源”是有条件的。

    $origin = get_comment_meta( $comment->comment_ID, \'origin\', true );
    if ( $origin != \'XenForo\') {
        // Write to Forum
    }
    
    这就引出了一个问题,preprocess\\u comment挂钩是否在comments\\u数组之前启动?

    在这种情况下,我可以通过更改add\\u操作中的10来影响触发吗?

    感谢您指出任何有帮助的信息。

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

    这个comments_array 过滤器作为comments_template() 函数,其目的是加载注释模板。它过滤准备在单数类型页面的注释部分呈现的注释。

    这个preprocess_commentcomment_post 动作(按该顺序)都作为wp_new_comment() 函数,其目的是在将新注释发送到数据库之前对其进行处理/清理。

    像这样的comments_array, 一方面,preprocess_commentcomment_post 另一方面,是完全独立的过程:一个是检索数据,另一个是保存数据。根据数据流动的方向,要么触发过滤器,要么触发操作,但它们永远不会一起触发!或者,更确切地说,这些操作将在保存新注释时触发,然后当页面使用保存的新注释重新加载时,过滤器将在重新加载时触发。但先来的是鸡还是蛋,这取决于你进入过程中的哪个点。

    此外,您不能通过更改优先级来影响哪些函数在不同挂钩上运行。优先级仅对附加到同一挂钩的函数进行优先级排序。

    相关推荐

    OOP development and hooks

    我目前正在为Wordpress编写我的第一个OOP插件。为了帮助我找到一点结构,a boiler plate 这为我奠定了基础。在里面Main.php 有一种方法可以为管理员加载JS和CSS资产:/** * Register all of the hooks related to the admin area functionality * of the plugin. * * @since 0.1.0 * @access private