Ajax-function auf #publish speichert nur als Entwurf – wie man es veröffentlicht?

Ich habe einen benutzerdefinierten Post-Typ namens “shift” (wie in Schichten von Mitarbeitern gearbeitet). Wenn Verschiebungen veröffentlicht werden, führe ich eine Ajax-function aus, um zu überprüfen, dass diese Verschiebung keinen Planungskonflikt hat. Wenn ein Zeitplanungskonflikt vorliegt, wird ein Dialogfeld angezeigt, das den Benutzer des Konflikts benachrichtigt und fragt, ob er fortfahren möchte. Wenn sie “Abbrechen” wählen, wird der Beitrag nicht veröffentlicht. Wenn sie “weiter” wählen, wird der Beitrag veröffentlicht.

Hier ist das Problem: Wenn sie “Fortfahren” wählen, wird der Post als Entwurf gespeichert, anstatt veröffentlicht zu werden. Wie kann ich den Post veröffentlichen, wenn er auf die Schaltfläche “Veröffentlichen” klickt?

Hier ist der JS (vereinfacht ein bisschen, damit Sie die wichtigen Teile sehen können):

$('#publish').on('click', function (e) { e.preventDefault(); var url = shiftajax.ajaxurl; var shift = $('#post_ID').val(); var data = { 'action': 'wpaesm_check_for_schedule_conflicts_before_publish', 'shift': shift, }; $.post(url, data, function (response) { if( response.action == 'go' ) { // there aren't any scheduling conflicts, so we can publish the post $('#hidden_post_status').val('publish'); $('#post').submit(); } else { // there are scheduling conflicts, so ask the user if they want to publish if (confirm(response.message)) { $('#hidden_post_status').val('publish'); $('#post').submit(); } else { // do nothing } } }); }); 

Beachten Sie die Zeile $('#hidden_post_status').val('publish'); – das ändert den Wert des versteckten Feldes mit der ID “hidden_post_status”, aber das hat keine Auswirkung. Der Beitrag wird weiterhin als Entwurf gespeichert.

Solutions Collecting From Web of "Ajax-function auf #publish speichert nur als Entwurf – wie man es veröffentlicht?"

Vielleicht wird diese Lösung funktionieren:

 var flag_ok = false; $('#publish').on('click', function (e) { if ( ! flag_ok ) { e.preventDefault(); var url = shiftajax.ajaxurl; var shift = $('#post_ID').val(); var data = { 'action': 'wpaesm_check_for_schedule_conflicts_before_publish', 'shift': shift, }; $.post(url, data, function (response) { if( response.action == 'go' ) { // there aren't any scheduling conflicts, so we can publish the post //$('#hidden_post_status').val('publish'); flag_ok = true; $('#publish').trigger('click'); } else { // there are scheduling conflicts, so ask the user if they want to publish if (confirm(response.message)) { //$('#hidden_post_status').val('publish'); flag_ok = true; $('#publish').trigger('click'); } else { // do nothing } } }); } }); 

Dies ist nur etwas schnelles zusammen, aber es veranschaulicht die Tatsache, dass Sie vor dem Aufruf der preventDefault Methode eine Bedingung hinzufügen können. Außerdem müssen Sie sich nicht mit versteckten Formularfeldern herumschlagen.

Bearbeiten Der Grund, warum es mit submit() nicht funktioniert submit() ist, dass ein Handler an das click Ereignis angefügt ist.