操作挂钩仅在发布帖子上,而不在编辑或更新上

时间:2016-02-09 作者:tinku

您能告诉我wordpress操作挂钩在用户创建新的自定义帖子时只能触发一次吗。

这意味着,如果用户创建了一个新帖子,则必须触发挂钩,但当用户更新或编辑帖子时,则不应执行挂钩。

以前我使用的是publish\\u post,但它总是在用户创建、编辑或更新帖子时执行,但是我添加了一些条件来阻止此操作,但对我来说不起作用。

代码如下:

add_action( \'publish_property\', \'pms_post_published_notification\', 10, 2 );


    function pms_post_published_notification( $ID, $post ) {
         if(get_post_field(\'post_type\',$ID ) === \'property\' && !wp_is_post_revision( $ID )){// custom code here}

3 个回复
SO网友:Max Yudin

你必须使用new_to_publish 操作如所述Post Status Transitions Codex页面(根据@prog comment更新):

add_action( \'new_to_publish\', \'pms_post_published_notification\', 10, 1 );

function pms_post_published_notification( $post ) {
    if( \'property\' === $post->post_type ) {
        // custom code here
    }
}
传递给函数的唯一参数是$post 对象,因此您可以利用它来检查post类型。

SO网友:Pieter Goosen

您始终可以利用更全球化的transition_post_status 动作挂钩,在所有帖子类型的每个转换状态上触发。

三个值通过引用传递给挂钩

  • $new_status 转换后的职位状态

  • $old_status 这是该职位在过渡之前的职位状态

  • $post 哪个是正在转换的帖子的当前帖子对象

    由于新帖子没有任何具体设置的旧帖子状态,而且肯定没有发布的旧状态,因此我们可以将其作为逻辑进行测试,然后在此基础上运行自定义代码

    add_action( \'transition_post_status\', function ( $new_status, $old_status, $post )
    {
        if (    \'publish\' === $new_status
             && \'publish\' !== $old_status
             && \'property\' === $post->post_type
        ) {
            // This is a new property post, lets do some work
            // Run your custom code here
        }
    }, 10, 3 ); 
    

SO网友:tinku

然而,下面给出的代码对我很有用。

add_action( \'new_to_publish\', \'pms_post_published_notification\', 10, 1 );

function pms_post_published_notification( $post ) {
    if($post->post_type == \'property\') {
        // custom code here
    }
}
谢谢@Max

相关推荐

使用快速编辑更新POST时,POST_ROW_ACTIONS过滤器不工作

我使用post\\u row\\u操作创建了两个链接,页面加载时显示良好。但使用快速编辑更新帖子后,链接将消失。是WordPress的bug还是我错过了什么。我的代码如下所示。add_filter(\'post_row_actions\', \'add_new_link\', 10, 2); public function add_new_link($actions, $page_object) { $actions[\'new_action\'] = \'<