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);'));
}
}
}