• HOME
  • WordPress
  • 特定の投稿にカスタムフィールドの入力エリアを追加

特定の投稿にカスタムフィールドの入力エリアを追加

add_action( 'admin_init', 'event_create' );
function event_create() {
	add_meta_box('events_meta', 'タイトル', 'events_meta_html', 'diet');
}
function events_meta_html () {
	global $post;
	$custom = get_post_custom($post->ID);
	$kuma = get_post_meta($post->ID, 'event_date', $event_date);
	$diet_name = $kuma[0];
	echo '<input type="hidden" name="events-nonce" id="events-nonce" value="' . wp_create_nonce( 'events-nonce' ) . '" />';
	?>
	<style type="text/css">
	#event-meta table th {
			text-align: left;
			padding: 10px;
			font-size:14px;
	}
	#event-meta table td {
			text-align: left;
			font-weight: normal;
			padding: 10px;
			font-size:14px;
	}
	</style>
	<div id="event-meta">
	<table>
	 <tr>
	 <th>現在表示</tt>
	 <td>
<?php if ( get_post_meta($post->ID,'event_date',TRUE) ): ?>
<?php echo get_post_meta($post->ID,'event_date',TRUE);?> 氏に設定されています。
<?php else:?>
現在は設定されていません。
<?php endif;?>
</td>
	 </tr>
		<tr>
			<th>氏名</th>
			<td>
<select name="event_date">
<?php if ( get_post_meta($post->ID,'event_date',TRUE) ){
echo "<option value='" .$diet_name ."'>" .$diet_name. " 氏</option>";
} ?>
<?php $categories = get_terms( 'name', 'get=all' );
echo "<option value=''>表示設定設定無し</option>";
foreach ($categories as $cat){
if($diet_name != $cat->name){
echo "<option value='" .$cat->name ."'>" .$cat->name. " 氏</option>";
}
}
 ?>
</select>
</td>
		</tr>
	</table>
	<p style="padding:0 10px; color:red;">表示したい関連記事の氏名を選び記事の保存をしてください。<p>
	</div>
<?php
}

add_action ('save_post', 'save_events');
function save_events($post_id){
global $post;
if ( !wp_verify_nonce( $_POST['events-nonce'], 'events-nonce' )) {
return $post_id;
}
if ( !current_user_can( 'edit_post', $post->ID )) {
return $post_id;
}
$event_date = $_POST['event_date'];
 update_post_meta($post->ID, 'event_date', $event_date);
}
<?php if ( get_post_meta($post->ID,'event_date',TRUE) ):?>
<h3>関連記事</h3>
<ul>
<?php 
$custom = get_post_custom($post->ID);
$hito = ($custom["event_date"][0]);
$categories = get_terms( 'name', 'get=all' );
foreach ($categories as $cat){
if ( get_post_meta($post->ID,'event_date',TRUE) ){
$posts = query_posts( array(
'taxonomy' => 'name',
'term' => $hito,
'posts_per_page' =>'5'
));
foreach ($posts as $post){?>
<li><?php echo get_the_date(); ?>:<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
}//endforeach
}//endforeach
}//endif
?>
</ul>
<?php endif; wp_reset_query();?>

まぁああべらあああーーーすっ。

簡単に補足すると
特定の投稿画面で指定したタクソノミーの一覧をとってきて
タクソノミーの名前をカスタムフィールドのデータにいれ
カスタムフィールドのデータがあるのなら、そのデータを利用しタクソノミーとタームを指定し
記事のリストを取得している。

カスタムフィールドテンプレートを使えばここまで書かなくてもいいかもしれないが
その場合は動的なタクソノミーの表現が難しいために新しく考えてみた。
氏名の出力の部分をもうすこし考える必要があるかとはおもうがわりと奇麗にかけたと思う。
(日本語表記をそのまま利用しているのが若干不安)
(IFの条件分岐もまだ整理できるから改良の余地は有るかね)