web-dev-qa-db-fra.com

Rendre metabox du type de message personnalisé entièrement compatible avec la sauvegarde automatique et la modification en bloc/rapide

J'essaie de créer un type d'article personnalisé et j'ai eu le même problème que décrit ici ; mes méta-informations personnalisées ont été correctement enregistrées, lors de la sauvegarde manuelle, mais ont été perdues dès que la sauvegarde automatique ajax a été exécutée au moins une fois.

Donc, j'utilise maintenant la solution montrée pour résoudre ceci:

function save_stationinfo($post_id) {
    if((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || (defined('DOING_AJAX') && DOING_AJAX) || isset($_REQUEST['bulk_edit'])) return;
    update_post_meta($post_id, 'station_url', $_POST['station_url']);
    update_post_meta($post_id, 'station_subheadline', $_POST['station_subheadline']);
    update_post_meta($post_id, 'station_streams', $_POST['station_streams']);
}

Mais cela désactive la fonctionnalité d'enregistrement automatique pour toutes les métadonnées personnalisées. Ce que je veux en réalité, c’est que ma métabox soit totalement compatible avec la sauvegarde automatique, ajax (je ne sais pas à quoi sert le mode DOING_AJAX, cependant) et la fonctionnalité de modification en bloc/rapide de Wordpress, afin que les méta-champs personnalisés soient automatiquement enregistrés et que Je peux ajouter certains champs à la boîte de dialogue d'édition rapide/en bloc.

Quelqu'un peut-il m'aider s'il vous plaît ici, ou me montrer où je peux trouver un tutoriel pour cela? (Supprimer la déclaration if n'aide pas ici, car cela me ramène à mon premier problème, bien sûr.) Merci d'avance!

1
René Schubert

WordPress n'envoie pas le contenu des champs personnalisés lors de l'enregistrement automatique (uniquement le titre, le slug et le contenu). C’est pourquoi le contenu du champ personnalisé sera supprimé si vous essayez de sauvegarder les données: Vous ne pouvez pas voir la différence entre le contenu supprimé et le contenu manquant.

Je créerais une fonction de sauvegarde automatique distincte pour cela, car la façon dont WordPress la gère peut changer à tout moment, et il n'y a pas de véritable API. Les champs enregistrés sont codés en dur sans aucun filtre:

if ( fullscreen && fullscreen.settings.visible ) {
    post_data["post_title"] = jQuery('#wp-fullscreen-title').val() || '';
    post_data["content"] = jQuery("#wp_mce_fullscreen").val() || '';
} else {
    post_data["post_title"] = jQuery("#title").val() || '';
    post_data["content"] = jQuery("#content").val() || '';
}

if ( jQuery('#post_name').val() )
    post_data["post_name"] = jQuery('#post_name').val();

Regardez wp-admin/includes/ajax-actions.php et wp-includes/js/autosave.js pour voir comment cela fonctionne.

Donc, fondamentalement, créez une copie de ce fichier JavaScript, supprimez tout ce que vous pouvez réutiliser et modifiez uniquement les champs que vous souhaitez enregistrer automatiquement. Puis mettez-le en file d'attente avec 'autosave' dans sa liste de dépendances.

1
fuxia

Une autre idée est de vérifier ma réponse ici avec un lien vers mon plug-in Custom Wordpress Bulk/Quick Edit et le code Gist complet pour un type de message personnalisé en vrac et scénario d'édition rapide pour 3 champs personnalisés.

Le Gist traite du DOING_AUTOSAVE, mais ignore un DOING_AJAX direct car nous voulons qu'il fonctionne de toute façon.

0
Michael Cannon