web-dev-qa-db-ja.com

カスタム投稿が保存または更新されるたびにトリガーされるWordPressで使用できるアクションは何ですか?

カスタム投稿のみにsave_postを設定する方法はありますか?私のfunctions.phpのコーディング方法は、多くのカスタムフィールドを、それらを必要としない/使用しない通常の投稿やページに追加することです。

14
Kyle Hotchkiss

3.7.0以降に更新-リマインダーの@Baptisteを小道具

3.7.0では、投稿タイプによってトリガーされる「_save_post_{$post->post_type}_」フックが導入されました。これにより、カスタム投稿タイプ(または「ページ」や「投稿」など)に固有のアクションを追加できます。これにより、以下の1行が節約されます。

受け入れられる方法は、_save_post_{post-type}_にアクションを追加することです(上記の例では、投稿タイプのスラッグを_{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_アクションをフックします。ただし、これらの投稿タイプがデータを保存する方法に違いがある場合は、関数内で投稿タイプのチェックを行うことを忘れないでください。

例:if ( 'my-cpt-1' == $post->post_type ){ // handle my-cpt-1 specific stuff here ...

15
Tom Auger

WordPress 3.7では、save_post_{$post_type}フックを使用してこれを処理する新しい方法が導入されました。

カスタム投稿タイプが「member-directory」であるとしましょう。これで、次のようなものを使用するだけで、その投稿タイプでsave_postを実行できます。

function my_custom_save_post( $post_id ) {

    // do stuff here
}
add_action( 'save_post_member-directory', 'my_custom_save_post' );
24
mindctrl