WordPress Snippet

ワードプレスをカスタマイズしよう

新規投稿時にカテゴリーをセットして チェックを入れる

投稿日: by

以下は、投稿時に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 );
}