WordPress Snippet

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

新規投稿時に、カスタムフィールドもセットで作る

カスタム投稿を作るといったキーワードで検索すると、add_meta_box()等を使ったりして、立派なメタボックス付のフォームを作るという事例が多く紹介されています。

この投稿では、WordPressの標準のカスタムフィールドを、新規投稿の時に一緒に作成してしまう簡単なコードを紹介します。

フォームを作ったりしない分簡単ですし、自家製フォームからデータの送信なども行わないため、初心者の人でも、安心して使えると思います。

add_filter( 'default_content', 'my_default_content',10,2 );

function my_default_content( $content,$post ) {
/* add to all new post and new page*/
	add_post_meta($post->ID, '今日のお天気', ' ', true );

/* when create a page*/
	if( $post->post_type== 'page' ) {
		add_post_meta($post->ID, '今日の気温', ' ', true );
	
	}

 return $content;
}

立派ではありませんが、どうですか?

$content

を、

$content.'俺の投稿'

などとしてやると、本分に文字列やhtmlを追加できます。

類似のフィルタに、default_title defalut_excerpt があります。

保存のタイミングで、カスタムフィールドを操作する

その他、保存する時に、本文からURL等を抽出して、投稿本文とは別の場所に、リンク画像を表示する用途の例

以下の例では、投稿本文にある最初の画像(jpg |jpeg |gif |png)を抽出して、カスタムフィールドに、画像サムネールAPIのURLに書き換えて、カスタムフィールドを作成します

add_action( 'save_post', 'my_add_thumbnail_fields',11,2 );

function my_add_thumbnail_fields( $content,$post ) {

	$article_body= $post->post_content;

	if( preg_match("/(https?:\/\/)([-_.!˜*()a-zA-Z0-9;\/?:@&=+$,%#]+)\.(jpg |jpeg |gif |png)/siu",$article_body,$regs) ) {
	
		$url	= $regs[1].$regs[2].$regs[3];
		$api_rest = "http://s.wordpress.com/mshots/v1/{$url}?w=300";
		
		if( get_post_meta($post->ID,'api_url',true ) ) {
			delete_post_meta($post->ID, 'api_url' );
		}
		if( get_post_meta($post->ID,'url',true ) ) {
			delete_post_meta($post->ID, 'url' );
		}
		
		update_post_meta($post->ID, 'api_url', $api_rest, true );
		update_post_meta($post->ID, 'url', $url, true );
	}
}

テンプレートのループの中で、

$html= '<img src="%1$s" />';
printf( $html, get_post_meta( $post->ID, 'api_url',true ) ); 

という形で、カスタムフィールドの値を取り出してやる事で、サムネールを表示するものです。

このように、新規投稿の作成時、保存時等に、自動的にカスタムフィールドを作成したり、投稿に関連する情報を保存したりする事が出来ます。

[emulsion_relate_posts]