在同一流程中创建帖子和更新

时间:2019-09-19 作者:SirLouen

简介:我正在使用一个名为事件日历的奇怪插件,它在WP函数之外运行。例如,我无法使用WP函数检索自定义字段。

因此,从本质上讲,我的问题是,我需要更新一个不同于事件日历CPT中发布的自定义内容的帖子类型,但我只能在帖子完全保存后检索它,而不能在“save\\u post”操作挂钩上检索,因为此时没有帖子元信息。

所以我的问题是:

是否有可能在保存帖子操作后立即在帖子中引入更新?最好推荐哪些选项

我的一个想法是使用另一个save\\u post操作,其优先级比引入更新功能的save\\u post操作低。但不确定这是否是后优化机制。

顺便说一句,如果有人已经处理过事件日历,并且有一个快捷方式,我实际上需要做的是,当保存事件日历中的事件时,我需要将事件开始日期存储在不同的CPT中。

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

现代部落已经发表了几篇文章来解决像你这样的问题。

请看一下他们的文章“Tips for Working With WordPress Actions and Filters“看看你能不能找到do_action()apply_filters() 在后期保存或发布事件之后发生的语句。

我相信你可能想要add_action(\'tribe_events_update_meta\',\'wpse_your_function\', 10,3), 在中找到/src/Tribe/API.php. 以下是他们对此的文档:

/**
 * Allow hooking in after all event meta has been saved.
 *
 * @param int     $event_id The event ID we are modifying meta for.
 * @param array   $data     The meta fields we want saved.
 * @param WP_Post $event    The event itself.
 *
 * @since 4.6
 */
do_action( \'tribe_events_update_meta\', $event_id, $data, $event );
你应该去看看。

如果成功,您的代码将是Pat J建议的修改版本:

add_action( \'tribe_events_update_meta\', \'wpse348671_updated_meta\', 10, 3 );
function wpse348671_updated_meta( $event_id, $data, $event ) {    
    // Update/create your 2nd post here.
    //The event start date should be stored in $data[\'EventStartDate\'].    

    // this should work too.
    $start = get_post_meta( $event_id, \'_EventStartDate\', true )
}

SO网友:Pat J

事件日历将开始和结束日期存储为元数据。钥匙是_EventStartDate_EventEndDate.

您可以使用updated_postmeta 行动挂钩:

add_action( \'updated_postmeta\', \'wpse348671_updated_meta\', 10, 4 );
function wpse348671_updated_meta( $meta_id, $object_id, $meta_key, $meta_value ) {
    if ( \'_EventStartDate\' == $meta_key ) {
        // Create your 2nd post here.
        //The event start date is stored in the variable $meta_value.
    }
}
此代码未经测试。

相关推荐