自定义发布类型操作挂钩/瞬变

时间:2014-07-10 18:36:12

标签: wordpress

这个问题涉及我正在开发的插件。

我每次尝试自定义帖子类型时都会尝试触发一个函数" Product"已添加或编辑。特别是,我需要一个在添加/编辑页面上加载元框之前触发的钩子,但这只会触发那个"产品"自定义帖子类型的编辑页面。

将触发的函数发出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;
    }
}

2 个答案:

答案 0 :(得分:0)

由于您使用的是动作挂钩,因此它不会等待您的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;
    }
}

答案 1 :(得分:0)

我可以使用动作过滤器edit_form_top在Admin Add / Edit屏幕上加载元框之前发出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;
        }
    }
}

像魅力一样。

相关问题