Get Post Meta的自定义发布状态转换问题

时间:2016-08-01 作者:JediTricks007

我正在尝试在发布新的香蕉帖子时,为一个名为“香蕉”的自定义帖子类型启动一个挂钩。

要求:

无法使用$\\u POST

  • 需要能够获取POST状态,以便我可以防止代码稍后再次运行,并检查其是否已发布
  • 需要能够获取$\\u POST meta
  • 操作挂钩工作正常。唯一的问题是,新帖子似乎无法获取\\u post\\u meta。如果您从挂起到发布,或者反之亦然,那么您将获得元作品。但是在新帖子上获取meta不起作用,并返回一个空结果。

    这里有一个我想做的例子。

    class bananas {
    
        public function __construct() {
            add_action( \'transition_post_status\', array( $this, \'email_bananas_published\' ), 10, 3 );
        }
    
    
        public function email_bananas_published( $new_status, $old_status, $post ) {
            if ( $post->post_type === \'bananas\' && $new_status !== $old_status ) {
                $email    = get_post_meta( $post->ID, \'_bananas_email\', true );
                error_log( $email );
            }
        }
    
    
    }
    
    我在这方面已经坚持了一段时间,非常感谢您的帮助。

    2 个回复
    SO网友:Palmer Del Campo

    以下内容对我有用。我将元保存和检索挂接到了相同的操作(post\\u transition\\u status),但优先级不同。

    //Save Your Custom Meta Meta, but hook it to transition_post_status instead of save_post, with a priority of 1
    function save_yourpost_meta(){
      global $post;
          if($post -> post_type == \'your_post_type\') {
              update_post_meta($post->ID, "your_meta_key", $_POST["your_meta_key"]);
          }
      }
    add_action(\'transition_post_status\', \'save_yourpost_meta\',1,1);
    
    
    //Then retrieve your custom meta only when the post is saved for the first time, not on updates. Hooked to the same action, with a lower priority of 100
    
    function get_meta_on_publish($new_status, $old_status, $post) {
    if(\'publish\' == $new_status && \'publish\' !== $old_status && $post->post_type == \'your_post_type\') {
      //Get your meta info
      global $post;
      $postID = $post->ID;
      $custom = get_post_custom($postID);
      //You have your custom now, have fun.
    
      }
    }
    add_action(\'transition_post_status\', \'get_meta_on_publish\',100,3);
    
    我希望这有帮助!

    SO网友:bynicolas

    你检查过了吗wp_insert_post 抄本里的钩子?

    我相信这就是你要找的。(未经测试)

    class bananas {
    
        public function __construct() {
            add_action( \'wp_insert_post\', array( $this, \'email_bananas_published\' ), 10, 3 );
        }
    
    
        public function email_bananas_published( $post_id, $post, $update ) {
    
            // If this is a revision, don\'t send the email.
            if ( wp_is_post_revision( $post_id ) || $update )
                return;
    
    
            if ( $post->post_type === \'bananas\' && $post->post_status === \'publish\' ) {
                $email = get_post_meta( $post_id, \'_bananas_email\', true );
                error_log( $email );
            }
        }
    }
    

    相关推荐

    列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

    这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在