Intereting Posts
Как я могу применять фильтры в своем классе, которые расширяют Walker_Nav_Menu? Использование оператора IF в файле заголовка Как создать разбивку на страницы для главной страницы с виджетной областью? Перенаправление на страницу не найдено mulitiste Вывести имя сообщения из значения определенного мета ключа Как отобразить категорию из определенного типа post-type Постоянная структура между двумя пользовательскими типами сообщений и таксономией WP-e-commerce (gothopped) Файлы на иврите – где я могу их получить? echo post-permalink без http и www Почему на Земле я получаю ошибки «undefined_index»? Невозможно отправить данные простой формы в HTML массовое удаление сообщений на основе метаданных Какие каталоги пытается создать WordPress при обновлении ядра и установке плагинов? Это рискованно, если я обновляю весь url в базе данных из-за изменения моего сайта? Плагин «Мета-бокс»: реализация мета-полей в пользовательском типе сообщений

Какое действие вызывается при сохранении черновиков?

Я хотел бы добавить поле метаданных в текущую запись на основе флажка в настраиваемом мета-окне, чтобы иметь возможность переключать мой настраиваемый плагин на пост по почте.

Для этого я закодировал следующие вещи:

  1. создать мета-поле на новом посту и новой странице страницы
  2. отредактируйте значение флажка в мета-окне и установите метаданные сообщения или страницы соответственно

Я преуспел в 1. Но у меня проблемы с номером 2. У меня есть следующий код для обработки настроек метаданных:

Обновление метаданных в зависимости от значения флажка в мета-окне

// register action add_action( 'save_post', 'cl_save_postdata'); /* When the post is saved, saves our custom data */ function cl_save_postdata( $post_id ) { // check if $post_id is just a revision id and if so get the parent id if($parent_id = wp_is_post_revision($post_id)){ $post_id = $parent_id; } // verify this came from the our screen and with proper authorization, // because save_post can be triggered at other times if ( !wp_verify_nonce( EMU2_I18N_DOMAIN, plugin_basename(__FILE__) ) ) return $post_id; // verify if this is an auto save routine. // If it is our form has not been submitted, so we dont want to do anything if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id; // Check permissions if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id; } // OK, we're authenticated: we need to find and save the data if ($_POST['cl-activated']) { add_post_meta( $post_id, 'cl-activated', true, true) or update_post_meta( $post_id, 'cl-activated', true); } elseif (get_post_meta ($post_id, 'cl-activated', true)) { delete_post_meta( $post_id, 'cl-activated'); } return $cl_is_activated; } 

Идея этого кода состоит в том, чтобы установить или отключить метаданные, связанные с cl, в зависимости от значения флажка. Форма мета-поля следующая:

Создание внутреннего метабокса HTML

 function cl_generate_inner_box($post, $metabox) { // Use nonce for verification wp_nonce_field( plugin_basename(__FILE__), EMU2_I18N_DOMAIN ); // The actual fields for data entry echo '<label for="cl-activated">'; _e("Activate collect links", EMU2_I18N_DOMAIN ); echo '</label> '; echo '<input type="checkbox" id="cl-activated" name="cl-activated" value='.$metabox['args']['cl-parameter-name']; if (get_post_meta($post_id, 'cl-activated', true)==true) { echo ' checked="checked"'; } echo ' />'; } 

Мои проблемы

  1. метаданные сообщения не заданы. Я попытался найти метаданные в таблице wp-postmeta в базе данных, и ее нет, независимо от того, что я делаю.
  2. Есть ли способ сохранить метаданные, даже если сообщение или страница по-прежнему являются черновиком, и пользователь удаляет только черновик? Если я использую действие save_post как я делаю сейчас, у меня save_post впечатление, что он вызывается только тогда, когда сообщение уже опубликовано.

редактировать

Первая проблема решена. Я дважды проверил переходы перехода, которые предоставляются WordPress. Мне показалось, что при редактировании сообщения должен быть save_post крюк save_post . Однако происходит то, что он вызывается, когда я нажимаю на новую кнопку сообщения , но не тогда, когда я сохраняю сообщение как черновик.

Чтобы очистить, мне нужен крючок, который позволяет мне получить функцию, выполняемую, когда пользователь изменил что-либо в сообщении, чтобы увидеть, был ли изменен мой пользовательский флажок, поэтому я могу соответствующим образом обновить метаданные сообщения.

Solutions Collecting From Web of "Какое действие вызывается при сохранении черновиков?"

После WP 2.3 у вас есть для всего состояния крючок: {$new_status}_{$post->post_type}

Альтернативу вы можете использовать as, если для статуса на hook save_post; пример сообщения post_type, вы можете изменить это сообщение на свой post_type или форму по умолчанию WP:

  public function set_status_private($id, $post) { if ( is_object($post) && 'post' === $post->post_type && 'publish' === $post->post_status ) { $post->post_status = 'private'; wp_update_post($post); } } 

Я надеюсь, это поможет вам.