【问题标题】:Wordpress hook for newly published post that can access to post metadata新发布的帖子的 Wordpress 钩子,可以访问帖子元数据
【发布时间】:2020-03-16 11:53:17
【问题描述】:

我需要仅对需要帖子元数据的新发布帖子执行一些操作

我尝试了许多不同的钩子,但它们都会触发其他“事件”,例如更新帖子,或者如果它们仅在发布时触发,则元数据为空或内部只有 _edit_lock 值。

  1. auto-draft_to_publish在我需要时触发钩子,但没有发布元数据

    add_action( 'auto-draft_to_publish', 'wpse120996_specific_post_status_transition' );
    
    
    function wpse120996_specific_post_status_transition($post) { 
     if ($post->post_type != 'poruke') {
        return;
     }
     $post_meta = get_post_meta($post->ID);
     echo "<pre>";
        die(var_dump( $get_post_meta ));
     echo "</pre>";
    
    }
    
  2. transition_post_status 适用于正确的状态检查,但也没有发布元数据

    'publish' === $new_status && 'publish' !== $old_status // right time,no post meta
    
  3. publish_post似乎这个甚至由于某种原因没有触发

    add_action( 'publish_post', 'myfunction' );
    function myfunction($post) { 
     echo "<pre>";
        die(var_dump( 'PUBLISHED?' )); // this dump is nowhere to be found, I looked in network tab in debugger
     echo "</pre>";
    }
    
  4. save_post只要在侧边栏中按下“添加新”,就会触发此操作

我对此有很多问题,我很难相信如此“基本”的东西不会成为 wordpress 中的一个功能,但到目前为止我没有发现任何对我的搜索有帮助的东西。

提前致谢。

【问题讨论】:

  • 'publish_post' 钩子已弃用,请参阅adambrown.info/p/wp_hooks/hook/publish_post 根据链接,publish_post 仅在某些帖子类型时有效:帖子更改为发布状态。另外,我很惊讶die(var_dump('anything')) 为你做了任何事情,因为var_dump() 没有返回任何东西。我会写 var_dump('anything');死();但这是细节。看来你遇到了一个难题,我还在努力。

标签: php wordpress metadata custom-post-type wordpress-hook


【解决方案1】:

首先,请在您的开篇帖子下方查看我的评论。

其次,在您发布的 1. 示例中,您正在转储 $get_post_meta,但您的本意是转储 $post_meta

我注意到$post 里面有post id 号,而不是$post-&gt;ID,所以我将$post 发送到get_post_meta

这似乎对我有用:

add_action( 'publish_post', 'myfunction' );
function myfunction($post) {        
    print_r(get_post_meta($post)); die();
}

确保在发布类型为 post 的新帖子时对其进行测试,而不是其他自定义帖子类型或页面,如评论中解释的链接 (https://adambrown.info/p/wp_hooks/hook/publish_post),您需要将钩子更改为其他内容才能使用它在其他帖子类型上。所以帖子类型为“publish_events”events

更新

抱歉,我看到生成的 post_meta 中几乎没有信息:

Array ( [_edit_last] => Array ( [0] => 1 ) [_encloseme] => Array ( [0] => 1 ) )

也许是时候向 Wordpress 提出功能请求(用于发布后挂钩)。

【讨论】:

  • 感谢您的帮助,所以您是说 post publish 钩子根本不存在?该死,我真的认为 WordPress 会有这样的功能。
  • 好吧,我好像找不到,就像你一样。
【解决方案2】:

我最终使用了 publish_post 钩子,最初它不起作用,因为如果您有自定义帖子类型,它必须像这样使用:

 publish_yourCustomPostName

它仍然无法访问数据库中的 post meta,因为它是在 postmeta 保存到数据库之前触发的,但幸运的是我可以像这样从 $_POST 变量访问 post meta:

$_POST['acf']

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 2013-12-11
    • 2017-04-06
    • 2023-03-08
    • 1970-01-01
    • 2017-11-15
    • 2018-07-26
    • 2022-08-14
    • 2016-04-27
    相关资源
    最近更新 更多