2011-07-28 33 views
1

基本上我在wordpress上保存自定義帖子。我決定在服務器端進行自定義驗證。以下是我的代碼的簡化版本。我在這裏遇到的問題是 - 儘管檢查,儘管填充字段,它似乎將自己降爲掛起模式。任何想法,我哪裏錯了?自定義後驗證,然後發佈驗證後檢查serverside - wordpress

add_action ('save_post', 'save_campaigns', 10, 2); 

add_action ('save_post', 'completion_validator', 20, 2); 

function save_campaigns($pid, $post) 
{ 
    if ((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || $post->post_tatus == 'auto-draft') return $pid; 
    if ($post->post_type != 'work') return $pid; 

    update_post_meta($pid, 'campaign_client', $_POST['campaign_client']); 

} 

function completion_validator($pid, $post) 
{ 
    // don't do on autosave or when new posts are first created 
    if ((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || $post->post_status == 'auto-draft') return $pid; 
    if ($post->post_type != 'work') return $pid; 

    // init completion marker (add more as needed) 
    $meta_missing = false; 

    // retrieve meta to be validated 
    $clientmeta = get_post_meta($pid, 'campaign_client', true); 

    // just checking it's not empty - you could do other tests... 
    if (empty($clientmeta) or empty($shortcopymeta) or empty($longcopymeta) or empty($gallerymeta) or empty($thumbnailmeta)) 
    { 
     $meta_missing = true; 
    } 

    // on attempting to publish - check for completion and intervene if necessary 
    if ((isset($_POST['publish']) || isset($_POST['save'])) && $_POST['post_status'] == 'publish') 
    { 
     // don't allow publishing while any of these are incomplete 
     if ($meta_missing == true) 
     { 
      global $wpdb; 
      $wpdb->update($wpdb->posts, array('post_status' => 'pending'), array('ID' =>$pid)); 
      // filter the query URL to change the published message 
      add_filter('redirect_post_location', create_function('$location','return add_query_arg("message", "4", $location);')); 

     } 
    } 
} 

回答

0

當帖子的發佈,它調用動作publish_post按我的知識。