【wordpress】カスタムフィールドを使って、ユーザーを投稿に紐付ける方法

ユーザーを、投稿者として関連づけるのではなく、
カスタムフィールドを使って関連づけしたい、そんな場合の対処法です。

fanction.phpを編集する

function.php に以下の内容を記述します。

add_action('admin_menu', 'basic_menu');
function basic_menu() {
    //管理画面で実行する関数
  add_userfealds();
}

//投稿画面(カスタム投稿タイプの場合、postを変更)にメタボックスを追加
function add_userfealds() {
	add_meta_box('userfealds', 'ユーザーを選択', 'insert_userfealds', 'post', 'normal', 'low'); 
}

//ユーザーのセレクトボックスを用意
function insert_userfealds(){
	global $post;
	$selectuserid = get_post_meta($post->ID, 'selectuserid', true);
	$users = get_users(array('orderby'=>'ID','order'=>'ASC'));
	wp_nonce_field(wp_create_nonce(__FILE__), 'my_nonce');
	echo '<p>ユーザーを選択してください</p><select name="selectuserid">';
	echo '<option value="0" selected>選択してください</option>';
	foreach($users as $user) :
		$uid = $user->ID;
		$uname = $user->display_name;
		echo '<option value="'.$uid.'" ';
		if($uid==$selectuserid)echo 'selected ';
		echo ' >'.$uname.'</option>';
	endforeach;
	echo '</select>';
}

//保存時にセレクトボックスの内容を保存
add_action('save_post', 'save_userfealds');
function save_userfealds($post_id){
	$my_nonce = isset($_POST['my_nonce']) ? $_POST['my_nonce'] : null;
	if(!wp_verify_nonce($my_nonce, wp_create_nonce(__FILE__))) {
		return $post_id;
	}
	if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; }
	if(!current_user_can('edit_post', $post_id)) { return $post_id; }
	$data = $_POST['selectuserid'];
	if(get_post_meta($post_id, 'selectuserid') == ""){
		add_post_meta($post_id, 'selectuserid', $data, true);
	}elseif($data != get_post_meta($post_id, 'selectuserid', true)){
		update_post_meta($post_id, 'selectuserid', $data);
	}elseif($data == ""){
		delete_post_meta($post_id, 'selectuserid', get_post_meta($post_id, 'selectuserid', true));
	}
}

あとは、カスタムフィールドを引っ張るだけ。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL