Любой способ иметь save_post только для пользовательских сообщений? То, как кодируется my functions.php, привязывается к множеству настраиваемых полей к обычным сообщениям и страницам, которые им не нужны / не используют.
Обновлено с 3.7.0 – реквизит @Baptiste для напоминания
В 3.7.0 был введен « save_post_{$post->post_type}
крюк, который будет вызван типом сообщения. Это позволяет вам добавить действие, специфичное для вашего настраиваемого типа сообщения (или «страница» или «сообщение» и т. Д.). Это экономит вам одну строку ниже.
Принятый метод заключается в добавлении действия в save_post_{post-type}
(заменяя save_post_{post-type}
post для {post-type}
в приведенном выше примере). Есть ряд проверок, которые вы можете / вероятно, должны делать в обратном вызове вашего действия, которое я документирую в примере ниже:
из Кодекса :
/* Register a hook to fire only when the "my-cpt-slug" post type is saved */ add_action( 'save_post_my-cpt-slug', 'myplugin_save_postdata', 10, 3 ); /* When a specific post type's post is saved, saves our custom data * @param int $post_ID Post ID. * @param WP_Post $post Post object. * @param bool $update Whether this is an existing post being updated or not. */ function myplugin_save_postdata( $post_id, $post, $update ) { // 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; // verify this came from the our screen and with proper authorization, // because save_post can be triggered at other times if ( !wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename( __FILE__ ) ) ) return; // Check permissions if ( 'page' == $post->post_type ) { if ( !current_user_can( 'edit_page', $post_id ) ) return; } else { if ( !current_user_can( 'edit_post', $post_id ) ) return; } // OK, we're authenticated: we need to find and save the data $mydata = $_POST['myplugin_new_field']; // Do something with $mydata // probably using add_post_meta(), update_post_meta(), or // a custom table (see Further Reading section below) return $mydata; }
Если вы регистрируете несколько настраиваемых типов сообщений, и хотите объединить свои функции save_post в одну функцию, save_post
общее действие save_post
. Но тогда не забудьте выполнить проверку типа сообщения в своей функции, если есть какие-то различия в том, как эти типы сообщений сохраняют свои данные.
например: if ( 'my-cpt-1' == $post->post_type ){ // handle my-cpt-1 specific stuff here ...
WordPress 3.7 представил новый способ обработки этого с помощью save_post_{$post_type}
.
Допустим, ваш пользовательский тип сообщения – это «каталог-член». Теперь вы можете запустить save_post в этом типе сообщений только с помощью следующего:
function my_custom_save_post( $post_id ) { // do stuff here } add_action( 'save_post_member-directory', 'my_custom_save_post' );