カスタム投稿を作るといったキーワードで検索すると、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 ) );
という形で、カスタムフィールドの値を取り出してやる事で、サムネールを表示するものです。
このように、新規投稿の作成時、保存時等に、自動的にカスタムフィールドを作成したり、投稿に関連する情報を保存したりする事が出来ます。