如果TRANSPORT_POST_STATUS出现问题(&P)

时间:2014-05-04 作者:Cody

我正在尝试让这个函数工作,但当把它放在一起时,它似乎不工作。当我刚刚

 $new_status == \'publish\' 
它有效,当我只使用第二个时,它也有效。当我尝试&;他们在一起似乎有点不对劲。

还应该注意的是,我只是尝试使用

add_action (\'publish_tweet\', \'twitter_run_when_published\');
但这也没用。

这是我尝试使用的完整函数,它来自一个codex示例

function intercept_all_status_changes( $new_status, $old_status, $post ) {
  if ( $new_status == \'publish\' && $_POST[\'post_type\'] == \'tweet\' ) {
    // Post status changed

  twitter_run_when_published ();

  }
}
  add_action( \'transition_post_status\', \'intercept_all_status_changes\', 10, 3 );
twitter\\u run\\u when\\u发布作品。我知道这一点,因为就个人而言,if/条件是有效的。

一些怪癖:如果我立即发布,该功能将正常工作。当我安排未来的职位时,它不起作用。

其他可能有帮助的信息我在代码中尝试了这些,但它们不起作用。

add_action(\'publish_tweet\', \'twitter_run_when_published\');
//possible alts to make it happen only once and not double down

add_action(\'new_to_publish_tweet\', \'twitter_run_when_published\');
add_action(\'draft_to_publish_tweet\', \'twitter_run_when_published\');
add_action(\'pending_to_publish_tweet\', \'twitter_run_when_published\');
add_action(\'future_to_publish_tweet\', \'twitter_run_when_published\');
add_action(\'auto-draft_to_publish_tweet\', \'twitter_run_when_published\');
add_action(\'private_to_publish_tweet\', \'twitter_run_when_published\');
add_action(\'inherit_to_publish_tweet\', \'twitter_run_when_published\');
add_action(\'trash_to_publish_tweet\', \'twitter_run_when_published\');
只有发布才能立即执行上述功能。

经典的例子很有效。

function intercept_all_status_changes( $new_status, $old_status, $post ) {
  if ( $new_status != $old_status) {
    // Post status changed

    twitter_run_when_published ();

 }
}
add_action( \'transition_post_status\', \'intercept_all_status_changes\', 10, 3 );
但这会多次触发该功能。它在插件中不起作用,但在主题中肯定会起作用。

我错过了什么?我希望这样,当一篇文章发布时,它符合自定义的帖子类型tweet时,它会执行一个功能。

编辑:我有点胡言乱语,试图理清几个措词不当的句子。

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

您的原始功能依赖于$_POST[\'post_type\'] 设置为适当的值。作为一般规则,您应该避免使用全局变量-如果您只使用函数提供给您的内容,那么您不必考虑它应该被调用的上下文。

在这种情况下,情况就是这样。您的函数依赖于全局变量$_POST[\'post_type\'], 虽然这在一种“状态”(发布帖子)下有效,但在另一种“状态”(cron作业,更新帖子)下无效。简言之$_POST[\'post_type\'] 并不总是你认为应该的样子。

下面从传递的$post 变量:

function intercept_all_status_changes( $new_status, $old_status, $post ) {
    if ( $new_status == \'publish\' && get_post_type( $post ) == \'tweet\' ) {
        // Post status changed
        twitter_run_when_published ();
    }
}  
add_action( \'transition_post_status\', \'intercept_all_status_changes\', 10, 3 );

SO网友:bstone

我也有这个问题,即使在避免$_POST[]

这个钩子看起来总的来说很笨重。

您可以从这个GitHub线程中看到一个关于transition\\u post\\u status挂钩如何在每次post状态更新时调用两次的讨论:https://github.com/WordPress/gutenberg/issues/15094

我面临的问题是:

如果/条件在功能范围内不起作用(如上面提问者所述)

  • transition\\u post\\u状态挂钩被调用两次,我的建议是,如果可以的话,避免使用此挂钩。

  • 结束

    相关推荐

    qTranslate in functions.php

    我有一个将用户重定向到特定页面的功能:wp_redirect(\'http://address/page\'); 通常我只会使用:<?php _e(\"<!--:en-->english permalink<!--:--><!--:de-->german permalink<!--:-->\"); ?> 但这是特定的情况,我不能这样使用它。。。你知道怎么做吗?谢谢