web-dev-qa-db-ja.com

新しいカスタム投稿の作成時にmenu_orderを定義しますか?

私はvideoというカスタム投稿タイプを作成し、Playlist_Ordermenu_orderフィールドを変更する)というプラグインを使用して、ユーザーがドラッグアンドドロップインターフェイスを使用してプレイリスト内の動画を並べ替えることができるようにしました。

ただし、新しい投稿を追加すると、デフォルトのmenu_order値に0が指定されているため、動画が再生リストの一番上に表示されます。

新しい動画投稿を作成する際には、再生リストの最後に表示することをお勧めします。つまり、すべてのvideo投稿タイプをクエリし、最大のmenu_order値を見つけて、新しい投稿にこの+1を設定します。

どうやってこれを実装できますか?

1
fxfuture

こんにちは@ fxfuture

あなたが探しているのはwp_insert_post_dataフックです。このコードをあなたのテーマのfunctions.phpファイルの一番下に追加したり、プラグインに追加したりすることができます。

add_filter('wp_insert_post_data','my_wp_insert_post_data',10,2);
function my_wp_insert_post_data($data, $postarr) {
  $post_type = 'video';
  if ($data['post_type']==$post_type && get_post($postarr['ID'])->post_status=='draft') {
    global $wpdb;
    $data['menu_order'] = $wpdb->get_var("SELECT MAX(menu_order)+1 AS menu_order FROM {$wpdb->posts} WHERE post_type='{$post_type}'");
  }
  return $data;
}
5
MikeSchinkel

add_filterメソッドの最後の10個と2個の引数は、実行の優先順位(オプションのデフォルト= 10)と新しい関数が受け取る引数の数(オプションのデフォルト= 1)です。

上記のコードに表示される唯一の理由は、デフォルトの引数の数を変更することです。

詳細はこちら http://codex.wordpress.org/Function_Reference/add_filter

1
ralor