Little.ws

wordpress:カスタムフィールドを使いやすく!

Written by chibi. Posted in wordpress

Tagged: , , ,

wordpress:カスタムフィールドを使いやすく!

Published on 2009年3月18日 with No Comments

wordpressのカスタムフィールドを無駄にしている人がきっと沢山いると思います。

こんなに便利なものを!!
でもきっと、使いにくいと思っている人もおおいはず。
ましてや、素人さんに、カスタムフィールドを使用させるのも・・。

ということで、今回はカスタムフィールドをばっちり使いやすくします。
以下の画像の様に投稿画面に誰でも分かりやすい入力欄を作成します。
custom_panel

functions.phpに書いてもOKですが、すぐぐちゃぐちゃになっちゃうので、今回は別にFileを作っちゃいます。
適当なFile名でOKです。ではソースを

<?php

	$work_meta_boxes =
	array(
	"smallimg" => array(
	"name" => "smallimg",
	"std" => "",
	"title" => "サムネイルイメージ",
	"description" => "画像をUPした場合、画像のサムネイルimgのアドレスをコピペ!")

/* 以下の段落をカスタムして増やせます。
	"company" => array(
	"name" => "カスタムフィールドの名前",
	"std" => "",
	"title" => "入力欄のタイトル",
	"description" => "説明文(タグ使用可能)"),
*/

	);

今回は『smallimg』という名前のカスタムフィールドで『サムネイルイメージ』がタイトルです。descriptionはその通り説明書きみたいなものです。stdは初期値です。初期値の変更で、imgが無いときにデフォルトの画像URLを入力しておくとか、そんな感じの使い方です。

次に、投稿画面への入力欄の追加のために以下を追加。

	function work_meta_boxes() {
		global $post, $work_meta_boxes;
		foreach($work_meta_boxes as $meta_box) {
			$meta_box_value = get_post_meta($post->ID, $meta_box['name'].'_value', true);

			if($meta_box_value == "")
			$meta_box_value = $meta_box['std'];

			echo'<input type="hidden" name="'.$meta_box['name'].'_noncename" id="'.$meta_box['name'].'_noncename" value="'.wp_create_nonce( plugin_basename(__FILE__) ).'" />';

			echo'<h2>'.$meta_box['title'].'</h2>';

			echo'<input type="text" name="'.$meta_box['name'].'_value" value="'.$meta_box_value.'" size="55" /><br />';

			echo'<p><label for="'.$meta_box['name'].'_value">'.$meta_box['description'].'</label></p>';
		}
	}

	function create_meta_box() {
		global $theme_name;

		if ( function_exists('add_meta_box') )
			add_meta_box( 'work-meta-boxes', 'TOPページサムネイル追加', 'work_meta_boxes', 'post', 'normal', 'high' );
	}

この辺の説明は割愛します。
知りたければ書きますが・・

上のソースの23行目の説明だけ・・

<?php add_meta_box('id', 'title', 'callback', 'page', 'context', 'priority'); ?>

id
編集画面でのID(識別名)です。
title
編集画面で表示されるタイトル(ラベル)です。
callback
コールバック関数です。(今回はwork_meta_boxes)
page
投稿画面orページ作成画面orリンク編集画面どれで表示させるか。 (‘post’, ‘page’, or ‘link’)
context
コンテキスト
priority
プライオリティ(優先順位です)。メタボックスが呼び出される順番。

あとは、記事と一緒に入力したデータをどこに保存するかの設定です。

	function save_postdata( $post_id ) {
		global $post, $work_meta_boxes;
		foreach($work_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'].'_value'];

			if(get_post_meta($post_id, $meta_box['name'].'_value') == "")
				add_post_meta($post_id, $meta_box['name'].'_value', $data, true);
			elseif($data != get_post_meta($post_id, $meta_box['name'].'_value', true))
				update_post_meta($post_id, $meta_box['name'].'_value', $data);
			elseif($data == "")
				delete_post_meta($post_id, $meta_box['name'].'_value', get_post_meta($post_id, $meta_box['name'].'_value', true));
		}
	}

ここも割愛。

んで、最後に

	add_action('admin_menu', 'create_meta_box');
	add_action('save_post', 'save_postdata');

あとはfunctions.phpに以下の一文を付け足して、呼び出してあげましょう。

<?php
	include_once (TEMPLATEPATH . '/保存したfile名.php');
?>

なんだか説明になってないので、File上げときます。
適当にいじって使って下さい。

ダウンロードする方、何かコメいただけるとうれしいです。
右クリ保存でお願いしますYO
ダウンロード

functions.phpだけは自分で一文を付け足して下さい。
カスタムフィールドの呼び出し方は。。前に書いた気がするので探して下さいw
無ければ後で書きます。

Share this

No Comments

There are currently No Comments on wordpress:カスタムフィールドを使いやすく!. Perhaps you would like to add one of your own?

Trackbacks & Pingbacks

  1. Wordpressのカスタムフィールドの意味が少しわかった - ブルマンぶるぶる

Leave a Comment