Функция Ajax В #Publish Сохраняется Только Как Черновик – Как Ее Опубликовать?

  • Автор темы Aclilswalm54
  • Обновлено
  • 21, Oct 2024
  • #1

У меня есть собственный тип записи под названием «смена» (как в сменах, выполняемых сотрудниками). Когда смены публикуются, я запускаю функцию Ajax, чтобы проверить, нет ли в этой смене конфликта расписания. Если возникает конфликт планирования, появляется диалоговое окно, предупреждающее пользователя о конфликте и спрашивающее, хотят ли они продолжить. Если они выберут «Отменить», сообщение не будет опубликовано. Если они выберут «продолжить», сообщение будет опубликовано.

Вот в чем проблема: если они выберут «продолжить», сообщение будет сохранено как черновик, а не опубликовано. Как сделать так, чтобы сообщение публиковалось при нажатии кнопки «Опубликовать»?

Вот JS (немного упрощенный, чтобы вы могли видеть важные части):

 $('#hidden_post_status').val('publish'); 

Обратите внимание на строку $('#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 } } }); }); - that does change the value of the hidden field with an ID of "hidden_post_status", but that doesn't have an effect. The post is still saved as a draft.

#ajax #публиковать #пост-статус

Aclilswalm54


Рег
09 Mar, 2014

Тем
76

Постов
164

Баллов
574
  • 25, Oct 2024
  • #2

Возможно, это решение сработает:

 click 

Это всего лишь что-то быстрое, но оно иллюстрирует тот факт, что вы можете добавить условие перед вызовом submit() method. Also, you won't need to mess with any hidden form fields.

Редактировать Причина, по которой это не работает preventDefault is that there is a handler attached to the 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 } } }); } }); событие.

 

ПАВЕЛ ШУПЕЛЬ


Рег
03 Jun, 2008

Тем
75

Постов
195

Баллов
590
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно