投稿ごとに値を設定する (WP)
投稿ごとに値を設定する
投稿ページにデータを付加する。投稿ページに付加したデータを使う。
function.php に動作を設定
以下のサンプルを使用。以下をテキストエディタに取り出し、entry_meta_ の文字列を別の名前に置き換える。
[FRM: r,b:#dfd]こんな感じで文字列を置き換えるとよいね
置き換える文字:entry_meta_
置き換えられる文字:entry_mypage_
[/FRM] ・・・そのままでも構わないけど、複数使う場合にはってことになるかな?いずれ関数名がぶつからないように注意。
※書き換える行をリバースさせています。(この仕様のまま(ページタイトルバナー、ページ毎メッセ)で使うなら触らなくてもいい)
スタートの /***** APPEND YUZUMARU **** とかも変えていいからね?
/************** APPEND YUZUMARU ************** entry_meta を 自分のファンクション名に置き換える ex entry_meta_ -> my_meta_ */ /* ENTORYの入力領域作成 エントリー項目を設定 */ $entry_meta_boxes = array( "サイドボックス" => array( "name" => "sidebox", "std" => "", "title" => "sidebox", "type" => "textarea", "description" => "▲サイドボックスのリンク集を設定"), "画像" => array( "name" => "headimg", "std" => "", "title" => "headimg", "type" => "text", "description" => "▲ヘッダ画像を入力") ); /* ここから下は触らなくても大丈夫 (「設定」のところの「エントリーページカスタマイズ」ぐらいかな?)*/ /* function body エントリーの表示 */ function entry_meta_boxes() { global $post, $entry_meta_boxes; foreach($entry_meta_boxes as $meta_box) { $meta_box_value = get_post_meta($post->ID, $meta_box['name'], true); if($meta_box_value == "") $meta_box_value = $meta_box['std']; if($meta_box['type']=='text'){ echo'<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />'; echo'<span style="font-weight: bold;">'.$meta_box['title'].' </span>'; echo'<input type="text" name="'.$meta_box['name'].'" value="'.$meta_box_value.'" size="60" /><br />'; echo'<p><label for="'.$meta_box['name'].'">'.$meta_box['description'].'</label></p>'; }elseif($meta_box['type']=='textarea'){ echo'<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />'; echo'<span style="font-weight: bold;">'.$meta_box['title'].' </span>'; echo'<textarea name="'.$meta_box['name'].'" cols="60" rows="5"/>'.$meta_box_value.'</textarea><br />'; echo'<p><label for="'.$meta_box['name'].'">'.$meta_box['description'].'</label></p>'; }elseif($meta_box['type']=='file'){ echo'<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />'; echo'<span style="font-weight: bold;">'.$meta_box['title'].' </span>'; echo'<input type="file" name="'.$meta_box['name'].'" value="'.$meta_box_value.'" size="60" /><br />'; echo'<p><label for="'.$meta_box['name'].'">'.$meta_box['description'].'</label></p>'; } } } /* 設定 */ function create_entry_meta_box() { global $theme_name; if ( function_exists('add_meta_box') ) add_meta_box( 'work-entry_meta-boxes', 'エントリーページカスタマイズ', 'entry_meta_boxes', 'post', 'normal', 'high' ); } /* 入力内容を保存 */ function entry_meta_save_postdata( $post_id ) { global $post, $entry_meta_boxes; foreach($entry_meta_boxes as $meta_box) { // Verify if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) { return $post_id; } if ( 'page' == $_POST['post_type'] ) { if ( !current_user_can( 'edit_page', $post_id )) return $post_id; } else { if ( !current_user_can( 'edit_post', $post_id )) return $post_id; } $data = $_POST[$meta_box['name']]; if(get_post_meta($post_id, $meta_box['name']) == "") add_post_meta($post_id, $meta_box['name'], $data, true); elseif($data != get_post_meta($post_id, $meta_box['name'], true)) update_post_meta($post_id, $meta_box['name'], $data); elseif($data == "") delete_post_meta($post_id, $meta_box['name'], get_post_meta($post_id, $meta_box['name'], true)); } } add_action('admin_menu', 'create_entry_meta_box'); add_action('save_post', 'entry_meta_save_postdata'); /************** /APPEND YUZUMARU **************/
ENTORYの入力領域作成 部分の設定内容
前出のソースの記事にぶら下げるデータ項目の設定は、以下のような意味になります。/* ENTORYの入力領域作成 エントリー項目を設定 */ $entry_meta_boxes = array( "サイドボックス" => array( ←項目名 "name" => "sidebox", ←変数名(項目のプログラム内部での呼び名) "std" => "", ←初期値 "title" => "sidebox", ←エントリー時のタイトル "type" => "textarea", ←エントリータイプ (text , textarea) "description" => "▲サイドボックスのリンク集を設定"), ←エントリー時の説明(次の項目を続けて書くのでカンマ区切り) : : "description" => "▲ヘッダ画像を入力") ←最後カンマが付いていないことに注意 );
設定した内容を使う
$sidebox=get_post_meta($post->ID, '変数名', true);
変数 sidebox に値が取り出されます。
使用サンプル
$sidebox=get_post_meta($post->ID, 'sidebox', true); if( $sidebox!=''){ echo $sidebox; }
投稿データに対してぶら下がっている値なのでポストループ内で使用しないと、値を取ってこれないことに注意。
つまり、index.php の ヘッダとかではポストデータループの外なので値はぶら下がっていないってこと。
ページごとにヘッダ画像を変える (サンプル)
head.php<div id="ptitle" class="site-title"> <?php $headimg=get_post_meta($post->ID, 'headimg', true); if($headimg!=''){ ?> <img src="<?php echo $headimg; ?>" alt="<?php bloginfo('name'); ?>" title="<?php bloginfo('name'); ?>"> <?php }else{ ?> <!--<a href="<?php bloginfo('url'); ?>">--> <img src="<?php echo $web_logo; ?>" alt="<?php bloginfo('name'); ?>" title="<?php bloginfo('name'); ?>"> <!--</a>--> <?php } ?>
ページごとにサイドバーにコメントを表示する (サンプル)
sidebar.php<div id="sidebar"> <?php $sidebox=get_post_meta($post->ID, 'sidebox', true); $plugin_url=plugins_url(); if($sidebox!=''){ $sidebox=str_replace('<?php echo plugins_url(); ?>',$plugin_url,$sidebox); ?> <div style="height:20px;"></div> <div class="sidebar-wrapper"> <h4>最近の投稿</h4> <ul style="list-style: none;"> <li><?php echo $sidebox; ?></li> </ul> </div> <?php } ?> <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('サイドバー') ) : ?> <?php endif; ?> </div><!-- /#sidebar -->
固定ページにも設定する
create_entry_meta_box()のところに ‘page’ ってやつを追加してやればいい。逆に固定ページだけ必要なら ‘post’ の方を消せばいい。
以下は、投稿ページのエントリーにも固定ページのエントリーにも対応する場合の例。
/* 設定 */ function create_entry_meta_box() { global $theme_name; if ( function_exists('add_meta_box') ){ add_meta_box( 'work-entry_meta-boxes', 'エントリーページカスタマイズ', 'entry_meta_boxes', 'post', 'normal', 'high' ); add_meta_box( 'work-entry_meta-boxes', 'エントリーページカスタマイズ', 'entry_meta_boxes', 'page', 'normal', 'high' ); } }
スポンサーリンク