2014-07-10 37 views
0

這個問題是關於我正在開發的插件。自定義帖子類型動作掛鉤/瞬變

我試圖在每次添加或編輯稱爲「產品」的自定義帖子類型時觸發一個函數。特別是,我需要一個鉤子,在元組加載到添加/編輯頁面之前觸發,但只在該「產品」自定義帖子類型的編輯頁面上觸發。

將觸發的函數發出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; 
    } 
} 

回答

0

我能夠使API請求之前裝上Admin元框中添加/編輯屏幕通過使用動作過濾器edit_form_top。只要加載了任何帖子/頁面/自定義帖子類型的添加/編輯頁面,就會觸發該特定的動作鉤子。爲了縮小它的範圍,以便該功能僅在我的「產品」自定義帖子類型的「添加/編輯」屏幕上觸發,我使用了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; 
     } 
    } 
} 

工程就像一個魅力。

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; 
    } 
} 
相關問題