如何在参数前后使用POST_UPDATED挂接

时间:2016-01-06 作者:CK13

我想检查一下这篇文章的标题是否有变化,如果有,我想做一些事情。

我曾想过使用post\\u更新的钩子,codex说“只要需要比较值,就使用这个钩子beforeafter 发布更新。“,但我不知道如何使用前后参数。

function check_values($post_ID, $post_after, $post_before){
        echo \'Post ID:\';
        var_dump($post_ID);

        echo \'<br>Post Object AFTER update:\';
            echo \'<pre>\';
            print_r($post_after);
            echo \'</pre>\';

        echo \'<br>Post Object BEFORE update:\';
            echo \'<pre>\';
            print_r($post_before);
            echo \'</pre>\';
    }

    add_action( \'post_updated\', \'check_values\', 10, 3 );
我也在重复echo check_values($post->ID, get_post(),get_post()); 在metabox中。

目前我得到了相同的值。

如果我echo check_values(); 我得到缺少的参数错误和onecho check_values($post_ID, $post_after, $post_before) 我得到空值。

How can i get the values before and after the update?

Update

function check_values($post_ID, $post_after, $post_before){
    if ($post_before->post_title != $post_after->post_title) { 
        // do stuff
    }   
}
add_action( \'post_updated\', \'check_values\', 10, 3 );

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

首先,您使用的函数是错误的。每当您使用add_action 作用在本例中,您已将其添加到post_updated 行动

基本上,您的check\\u values函数被添加到队列中,然后在执行操作时,该队列将被操作调用。

您可以在此处看到操作的调用位置:https://core.trac.wordpress.org/browser/tags/4.4/src/wp-includes/post.php#L3359

参见本文件第3359行。有一个函数称为do_action 它将调用与post\\u updated操作相关的所有函数。这将包括check\\u values函数。这就是调用函数的地方,正如您所看到的,它传递了必要的参数,以便与函数进行交互。

尝试更新或添加帖子。您应该在那里看到一些输出,因为这是wordpress调用您的函数的时候。

然后,为了检查是否有更改,请比较post对象前后的两个标题

<?php 

function check_values($post_ID, $post_after, $post_before){
    if( $post_after->post_title !== $post_before->post_title ) {
        // do something
    }
}

add_action( \'post_updated\', \'check_values\', 10, 3 );
?>

相关推荐

POST_ROW_ACTIONS不适用于分层帖子类型

我正在开发一个插件,其中注册了一个自定义帖子类型(CPT),我需要向该特定帖子类型添加自定义行操作。但无法将以下代码连接到post_row_actions 工作:function ttest_copy_button( $actions, $post ) { // var_dump($actions); if( \'ttest\' === $post->post_type ) { // pass nonce to check and ve