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