自定义帖子类型动作挂钩/瞬态
Posted
技术标签:
【中文标题】自定义帖子类型动作挂钩/瞬态【英文标题】:Custom Post Type Action Hook / Transients 【发布时间】:2014-09-01 06:18:38 【问题描述】:这个问题是关于我正在开发的插件。
每次添加或编辑名为“产品”的自定义帖子类型时,我都会尝试触发一个函数。特别是,我需要一个在添加/编辑页面上加载元框之前触发的钩子,但它只会在“产品”自定义帖子类型的编辑页面上触发。
将触发的函数发出 API 请求,并暂时缓存响应。
动作挂钩的原因是因为在我当前的代码中,当瞬态过期时,添加/编辑页面在第一页加载期间被破坏。但是,如果您在此之后刷新页面,它会按预期显示。我相当肯定这正在发生,因为检查瞬态的当前条件语句位于生成元框的函数内部。所以我的理论是,如果我可以在生成元框之前设置一个动作挂钩来检查瞬态,它可能会解决问题。
但是我有第二个理论,即问题是由于发出 API 请求并返回响应所需的时间比加载页面所需的时间长。因此,如果有一个动作钩子会延迟页面加载直到函数完成执行,那将是一个理想的解决方案,但我不相信这样的动作钩子存在。我什至不确定这样的延迟是否可能。
非常感谢你们可能提供的任何帮助或替代建议。谢谢你们的时间。
代码示例:
add_action( 'edit_product', 'llc_hook_campaign_find_active' );
function llc_hook_campaign_find_active()
if (!$t_campaign_find_active)
limelight_cart_campaign_find_active();
return false;
【问题讨论】:
【参考方案1】:通过使用操作过滤器 edit_form_top,我能够在元框加载到管理添加/编辑屏幕之前发出 API 请求。一旦加载任何帖子/页面/自定义帖子类型的添加/编辑页面,就会触发该特定操作挂钩。为了缩小范围,使该功能仅在我的“产品”自定义帖子类型的添加/编辑屏幕上触发,我使用了 get_current_screen() 和 if 语句。
add_action('edit_form_top', 'llc_hook_campaign_find_active');
function llc_hook_campaign_find_active()
//Fetch current screen information
$screen = get_current_screen();
//Check if post type is "product"
if($screen->post_type == "product")
//API Request that checks for an existing transient
$t_campaign_find_active = get_transient('campaign_find_active');
if (!$t_campaign_find_active)
limelight_cart_campaign_find_active();
return false;
像魅力一样工作。
【讨论】:
【参考方案2】:由于您使用的是动作挂钩,因此它不会等待您的 API 响应。 请尝试使用过滤器挂钩。
尝试使用wp_insert_post_data
function filter_handler( $data , $postarr )
//make your API call, get the response and store it in post meta or data wherever you want
$response = 'your API response';
//e.g. update_post_meta($postarr['ID'], 'meta_key', $response); OR
//$data['post_content'] = $response;
return $data;
add_filter( 'wp_insert_post_data', 'filter_handler', '99', 2 );
在你的情况下,以下应该工作 -
add_filter( 'wp_insert_post_data', 'llc_hook_campaign_find_active', '99', 2 );
function llc_hook_campaign_find_active( $data , $postarr )
if (!$t_campaign_find_active)
limelight_cart_campaign_find_active();
return $data;
【讨论】:
以上是关于自定义帖子类型动作挂钩/瞬态的主要内容,如果未能解决你的问题,请参考以下文章
使用操作挂钩创建自定义Wordpress REST API端点
在 WordPress 中更新自定义 PageLine 的部分时的操作挂钩