記事の一覧にリスト項目を追加する。


function manage_posts_columns($columns) {
	$columns['client'] = "クライアント";
	$columns['dairi'] = "代理店";
        $columns['thumbnail'] = "サムネイル";
	return $columns;
}
function add_column($column_name, $post_id) {
	if( $column_name == 'client' ) {
	$kuma = get_post_meta($post_id, 'event_date', true);
	$t = get_term_by('term_id',$kuma,'works-client');
	echo $t->name;
	}

	if( $column_name == 'dairi' ) {
	$kuma = get_post_meta($post_id, 'dairi_dat', true);
	$te = get_term_by('term_id',$kuma,'works-client');
	echo $te->name;
	}

	if ( 'thumbnail' == $column_name) {
	echo get_the_post_thumbnail($post_id, array(50,50), 'thumbnail');
	}

}

add_filter( 'manage_posts_columns', 'manage_posts_columns' );
add_action( 'manage_posts_custom_column', 'add_column', 10, 2 );

メタフィールドに配列として保存したものを出力する[配列]

<?php
$com = count($works_url);
for($i = 1; $i <= $com; $i++):
?>
<div class='inbox'><input name="works_url[]" class="works_url" size='30' value="
<?php if(isset ( $works_url)) echo $works_url[$i-1]; ?>
" /><span class='deth' onclick='javascript:app();'>◆</span></div>
<?php endfor;?>

フォームの出力としては
配列のカウントを行い、カウント分をforで繰り返し出力する。
wordpress側では基本的に自動で配列かどうかの判断・処理を行うので
管理画面でのinputはnameの部分をを[]を末尾にいれることで配列扱いになる。
[]の中に数字をいれなければ自動で配列のカウントを増やしてくれる。

あとは出力する際はどの要素かの指定をする必要があるので[$i-1]などとし数字を使う。

下記の動的に追加するフォームとあわせて無制限の投稿エリアフォームを打ち出すことができるようになる。

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
<!--
$(function() {

$("#animate").click(function(){
$(this).before("<div class='inbox'><input name='works_url[]' class='works_url' size='30' value='' /><span class='deth' onclick='javascript:app();'>◆</span></div>");
});

});

function app() {
$("span.deth").click(function(){
$(this).closest('div').remove('.inbox');
});
}
// -->
</script>
</head>
<body>

<div class='inbox'><input name='works_url[]' class='works_url' size='30' value='' /><span class='deth' onclick='javascript:app();'>◆</span></div>
<span id="animate">on</span>

</body>
</html>

やりたいことは大分出来るようになった。
よきかなよきかな。

自作ウィジェット作成について

http://kachibito.net/wordpress/custom/how-to-add-your-widget.html

class MyWidgetItem extends WP_Widget {
	function MyWidgetItem() {
    	parent::WP_Widget(false, $name = 'リンク先バナー');
    }
    function widget($args, $instance) {
        extract( $args );
        $title = apply_filters( 'widget_title', $instance['title'] );
        $url = apply_filters( 'widget_url', $instance['url'] );
	$img = apply_filters( 'widget_img', $instance['img'] );
    	?>
        <li <?php echo 'class="banner"'; ?> >
           <a href="<?php echo $url; ?>" target="_blank"><img src="<?php echo $img; ?>"></a>
        </li>
        <?php
    }
    function update($new_instance, $old_instance) {
	$instance = $old_instance;
	$instance['title'] = strip_tags($new_instance['title']);
	$instance['url'] = strip_tags($new_instance['url']);
	$instance['img'] = strip_tags($new_instance['img']);
        return $instance;
    }
    function form($instance) {
        $title = esc_attr($instance['title']);
        $url = esc_attr($instance['url']);
	$img = esc_attr($instance['img']);
        ?>
        <p>
          <label for="<?php echo $this->get_field_id('title'); ?>">
          <?php _e('Title:'); ?>
          </label>
          <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" />
        </p>

        <p>
           <label for="<?php echo $this->get_field_id('url'); ?>">
           <?php _e('URL:'); ?>
           </label>
            <input class="widefat" id="<?php echo $this->get_field_id('url'); ?>" name="<?php echo $this->get_field_name('url'); ?>" type="text" value="<?php echo $url; ?>" />
        </p>
        <p>
           <label for="<?php echo $this->get_field_id('img'); ?>">
           <?php _e('img:'); ?>
           </label>
            <input class="widefat" id="<?php echo $this->get_field_id('img'); ?>" name="<?php echo $this->get_field_name('img'); ?>" type="text" value="<?php echo $img; ?>" />
        </p>
	<?php if ( $img ) :?>
	<img src="<?php echo $img; ?>">
	<?php endif;?>
        <?php
    }
}
add_action('widgets_init', create_function('', 'return register_widget("MyWidgetItem");'));

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

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の条件分岐もまだ整理できるから改良の余地は有るかね)

管理画面にページの追加

function test_menu_page() {
	$siteurl = get_option( 'siteurl' );
?>
	<div class="wrap">
		<p>ここにページで表示したいものを記述</p>
	</div>
<?php
}
function test_admin_menu() {
	add_menu_page( 'ページのタイトル', 'サイドバーに表示される項目名', 'read', __FILE__, 'test_menu_page' );
}
add_action( 'admin_menu', 'test_admin_menu' );

add_menu_page(”page_title”, ”menu_title”, ”access_level/capability”, ”file”, ”[function]”, ”[icon_url]”);

page_title
メニューが有効になった時に表示されるHTMLのページタイトル用テキスト。
menu_title
管理画面のメニュー上での表示名。
access_level/capability
このメニューページを閲覧・使用するために最低限必要なユーザーレベルまたはユーザーの種類と権限 。
file
メニューページのコンテンツを表示するPHPファイル。
function
メニューページにコンテンツを表示する関数。
技術的に言うとfunctionパラメータはオプションですが、指定されていない場合、WordPressは基本的にインクルードされたPHPファイルが管理画面を出力するものと仮定し、関数を呼び出しません。ほとんどのプラグイン作者はページ生成コードを持つ関数をメインのプラグインファイル内に書いています。
icon_url
これはWordPress 2.7においてのみ有効です。メニューにカスタムアイコンを追加します。

http://wpdocs.sourceforge.jp/Adding_Administration_Menus

納品する案件には必ずいれたいファンクション

function custom_post_dashboard() {
if ( '1' != get_option('blog_public') ){
echo "<p><span style='color:red;'>現在プライベート設定です 。</span></p>";
}else{
echo "公開中";
}
}
add_action('right_now_content_table_end', 'custom_post_dashboard');

これをいれておいてプライベートモードかどうかの確認がすぐにわかるようにしておくほうがいい。
ぜーーーーったいに。
納品したものが設定がプライベートのままでしたなんていうのはもうシャレにならない。