2013-04-03 3 views
1

J'ai une fonction personnalisée qui fonctionne avec mon type de message personnalisé. Alors que l'action porocessing save_post:wordpress set post_status en tant que "draft" dans l'action 'save_post'

add_action('save_post', 'my_custom_function'); 

Je voudrais définir l'état après que le projet (en cas de problème à obtenir des données personnalisées à l'extérieur api). Dans ma fonction my_custom_function Je possède ce petit bloc:

if ($error == true) { 
    $override_post = array(); 
    $override_post['ID'] = $post_id; 
    $override_post['post_status'] = 'draft'; 
    wp_update_post($override_post); 
} 

mais il semble, qu'après save_post est en cours de traitement, puis post_status est en cours de nouveau. Quelqu'un a une idée, où devrais-je accrocher, alors tout en enregistrant les données de poste, je peux modifier ses post_status, post_date et d'autres informations post-données afin qu'ils ne soient pas dépassés?

Répondre

3

Vous devez l'accrocher à wp_insert_post_data. Vous pouvez ensuite utiliser une fonction comme celle-ci pour définir l'état de votre brouillon:

add_filter('wp_insert_post_data', 'set_post_to_draft', 99, 2); 

function set_post_to_draft($data, $postarr) { 

    if (your_condition) { 
    $data['post_status'] = 'draft'; 
    } 

    return $data; 
} 
+0

Existe-t-il un moyen de faire de même avec un paramètre personnalisé dans la légende de fonction? –

+0

Peu importe, il suffit d'utiliser post_meta pour envoyer une variable correcte. –

+0

Hmm. Il semble que cette méthode crée un problème. Si l'utilisateur ouvre new-post.php mais ne l'enregistre pas - le brouillon automatique créé est créé qui ne peut pas être géré par wordpress (la fonction pousse 'post_status' non seulement lors de la sauvegarde, mais aussi lors de l'ouverture de' post-new.php '). –

Questions connexes