wordpress3.0 でカスタムポストとタクソノミー

wordpressがバージョンアップされて注目しているカスタムポスト。

投稿画面を独自にカスタマイズできるのでCMSとして利用しやすさがぐっとあがったと思います。

ただ、管理画面からは一覧で表示できても、実際にどうやって一覧をつくれば?といったところで何日も悩んでました。

いろいろ検索した結果、現状はなしのようです。残念。

パーマリンクをいろいろ調べましたが、/archives/post_idにしました。

この辺はいままで掘り下げてこなかったところではありますが。なかなか理解するのが難しい。

あと、注意点としては、カスタムポストで投稿した場合は、post_idではなくてpostnameが使われるようなので、日本語のタイトルでは、日本語のURLに。

カスタムポストでさらに分類をつけると、分類別の一覧は問題ない感じです。

ただ、カスタムポストの一覧を出すには?と悩んだ結果、さらに一覧の分類をつけて、両方にチェックを入れる。といった逃げ道に。。。

不動産サイトならこんな感じらしい。

themeのfunction.phpにでも記載。



/*
* 自動保存無効
*/
function disable_autosave() {
wp_deregister_script('autosave');
}
add_action( 'wp_print_scripts', 'disable_autosave' );

add_action( 'init', 'add_realestate_type', 0 );
function add_realestate_type() {
$args = array(
'label'ツツ ツ=> '物件管理',
'labels' =>ツツ ツarray(
'singular_name' => '物件',
'add_new_item' =>ツツ ツ'新規物件を追加',
'add_new'ツツ ツ=> '新規追加',
'new_item' =>ツツ ツ'新規物件',
'view_item' => '物件を表示',
'not_found' => '物件は見つかりませんでした',
'not_found_in_trash' => 'ゴミ箱に物件はありません。',
'search_items' =>ツツ ツ'物件を検索',
),
'public' =>ツツ ツtrue,
'show_ui' => true,
'_builtin' => false, // It's a custom post type, not built in!
'query_var'ツツ ツ=> true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' =>'bukken'), // Permalinks format
'menu_position'ツツ ツ=> 5,
'supports' => array('title','editor','author',
'excerpt','comments','custom-fields')
);
register_post_type('bukken', $args);
register_taxonomy(
'bc',
'bukken',
array(
'hierarchical' => true,
'label' => '物件の分類',
'singular_name' => '物件の分類',
'query_var' => true,
'public' => true,
'rewrite' => array('slug' => 'type')
)
);

}
/*
* カスタムポストの一覧(管理画面)
*/

add_filter('manage_edit-bukken_columns', 'my_bukken_columns'); //一覧
add_action('manage_posts_custom_column', 'my_bukken_column'); //中身
function my_bukken_columns($columns){
$columns = array(
'cb' => '',
'image' => '画像',
'title' => '物件名',
'tag' => '分類',
'place' => 'エリア',
'money' =>'価格帯',
'kakaku' => '価格',
'date' => '日付'
);
return $columns;
}
function my_bukken_column($column){
global $post;
if('image' == $column) echo wp_get_attachment_image(get_post_meta($post->ID,'photo1',true),'thumbnail');
elseif ('tag' == $column) the_terms(0, 'bc');
elseif ('place' == $column) echo get_post_meta($post->ID,'place',true);
elseif ('money' == $column) echo get_post_meta($post->ID,'money',true);
elseif ('kakaku' == $column) echo get_post_meta($post->ID,'kakaku',true).get_post_meta($post->ID,'tax',true);
}

/*
* Plugin Name: MT Style Post Name
* Description: タイトルから英数字、ダッシュ、アンダーバーのみ抜き取ってスラッグに。日本語しか使われてないエントリはPost_IDを使う。
* Author: 449
* Plugin URI: http://pc10.2ch.net/test/read.cgi/blog/1163599919
* Version: 0.1
* */

add_filter('sanitize_title','sanitize_title_numalpha_only',9);
function sanitize_title_numalpha_only($title) {
return preg_replace('/[^%a-zA-Z0-9 \(\)_-]/', '-', $title);
}



自動でbukken_categoryタクソノミーの一覧タームを保存する方法が分かったのでメモ。



/*
* 自動でtermを保存
*/
add_action('save_post', 'autosave_taxnomy');
function autosave_taxnomy($post_id){
if($_POST['post_type'] =='bukken'){
$term = get_term_by( 'slug', 'lists', 'bukken_category');
//なければ作成
if(!$term) $term = wp_insert_term('物件一覧','bukken_category', array('slug'=>'lists'));
wp_set_object_terms($post_id,intval($term->term_id),'bukken_category');
}
}





と、上記のままだと、複数選べなかったので、

/*
* 自動でtermを保存
*/
add_action('save_post', 'autosave_taxnomy');
function autosave_taxnomy($post_id){
if($_POST['post_type'] =='bukken'){
$term = get_term_by( 'slug', 'alls', 'bukken_category');
//なければ作成
if(!$term) $term = wp_insert_term('物件一覧','bukken_category', array('slug'=>'alls'));
foreach ( $_POST['tax_input'] as $taxonomy => $tags ) {
$taxonomy_obj = get_taxonomy($taxonomy);
if ( is_array($tags) ) // array = hierarchical, string = non-hierarchical.
$tags = array_filter($tags);
$tags = array_merge($tags,array($term->term_id));
wp_set_post_terms( $post_id, $tags, $taxonomy );
}
}
}




に変更