以下は、投稿時にdate( ‘Y’ )(2016)カテゴリーをセットして、チェックを入れます。
add_filter( 'default_content', 'my_default_content', 10, 2 ); function my_default_content( $content, $post ) { if ( $post->post_type== 'post' ) { $timestamp = strtotime( $post->post_date ); $y = absint( date( 'Y', $timestamp ) ); if( ! category_exists( $y ) ) { $my_cat= array( 'cat_name' => $y, 'category_description' => "{$y}年の投稿", 'category_nicename' => $y, 'category_parent' => '' ); wp_insert_category( $my_cat ); } $cat_id= get_cat_ID( $y ); wp_set_post_categories( $post->ID, array( $cat_id ), true ); } return $content; }
上記のフィルターは、新規投稿の作成時に 現在年のカテゴリーをセットしていますが、スレッドのように記事の投稿日を基準にカテゴリーを作成する場合は、フックを変更する必要があります。
以下の試作コードは、すでに年カテゴリーが存在すれば、チェックが入りますが、存在しない場合 一回目の保存で、カテゴリーを作成 サイド保存ボタンを押すことで、チェックが入ります。タイミングを工夫する必要がありそうです。
一つのアクションフックの中で、wp_insert_category()とwp_set_post_categories()を呼び出しているので、カテゴリーが存在しない場合に実行される wp_insert_category()は、サーバサイドで動作するのでinsertしても、タイミングが同時なので、その直後にwp_set_post_categories()はコケルという構図です。
add_action( 'edit_post', 'my_default_content', 10, 2 ); function my_default_content( $post_id, $post ) { /** * 課題 カテゴリーがセットされていない場合は、Saveボタンを2回押す必要があります */ $timestamp = get_the_date( 'U', $post_id ); $y = absint( date( 'Y', $timestamp ) ); $cat_id= get_cat_ID( $y ); if ( !$cat_id ) { $my_cat= array( 'cat_name' => $y, 'category_description' => "{$y}年の投稿", 'category_nicename' => $y, 'category_parent' => '' ); wp_insert_category( $my_cat ); } wp_set_post_categories( $post_id, array( $cat_id ), true ); }