WordPressカスタム投稿・分類

このブログもワードプレスでできていますが、ワードプレスってすごく便利ですよね!バージョン1.5か2.0ぐらいから使い始めておりますが、この機能の進化に目をみはる物がありますね。バージョンMUと統合されて更に使いやすくなったワードプレス!

ウェブ制作にもCMSとしてよく使われていますね。ほんとワードプレスすごい!PHPの学習する際にもこのコードなどを参考にしても良いかもしれませんね。

3.0からの新機能で便利な機能としてカスタム投稿をご紹介します。プラグインでも利用可能ですが、functions.phpに記述しても使えます。

まずカスタム投稿って何?って事ですよね。


スポンサーリンク


管理画面で「投稿」って項目がありますが、基本的にそこから記事を投稿します。当たり前ですが。。。まあ、ブログと同じですね。
その記事と違うジャンルの記事を書きたいなと思ったときは普通はカテゴリーで分けて投稿しますよね。ただ管理する側だとわかりづらくなりますし、いろんな記事がごちゃごちゃしちゃうのでわかりやすくこの「投稿」って項目を増やそうということができるのです!

カテゴリー別で投稿記事を各ページに表示することは可能ですが、記事ごとに管理できた方がわかりやすいですよね。

要するに複数の「投稿」を作ろうって事なんですね。

下記をそのままfunction.phpにコピーしてアップしたら管理画面でカスタム投稿って項目が増えているはずですよ!

function add_custompost_type() {
	$arg = 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,
		'hierarchical' => false,
		'menu_position' => 5,
		'supports' => array('title','editor','author','thumbnail',
		'excerpt','comments','custom-fields' ,'revisions'),
		'has_archive' => true
	); 
	register_post_type('custom', $arg);
	
	//カテゴリ
	$arg = array(
		'label' => 'カテゴリ',
		'labels' => array(
			'name' => 'カテゴリ',
			'singular_name' => 'カテゴリ',
			'search_items' => 'カテゴリを検索',
			'popular_items' => 'よく使われているカテゴリ',
			'all_items' => 'すべてのカテゴリ',
			'parent_item' => '親カテゴリ',
			'edit_item' => 'カテゴリの編集',
			'update_item' => '更新',
			'add_new_item' => '新規カテゴリを追加',
			'new_item_name' => '新しいカテゴリ',
		),
		'public' => true,
		'hierarchical' => true,
	);
	register_taxonomy('custom_category', 'custom', $arg);
	
	//タグ
	$arg = array(
		'label' => 'タグ',
		'singular_label' => 'タグ',
		'update_count_callback' => '_update_post_term_count',
		'public' => true,
		'hierarchical' => false,
		'show_ui' => true
    );
    register_taxonomy('custom_tag', 'custom', $arg);
	flush_rewrite_rules();
}
add_action('init', 'add_custompost_type');

カスタム投稿を出力する側の記述です。
home.phpやindex.phpに記述するとわかりやすいかも。

 'custom'));?>
have_posts()) : $custom->the_post(); ?>

()

カスタム投稿・分類に関して少し情報を残しておきます。意外にカスタム分類って、私がやろうと思ったやり方なんですが、結構面倒だな~と思いましたね。これは使い方次第ですね。

まず上記の例で作りますと、カスタム投稿のポストタイプがcustomでそのカテゴリーがcustom_categoryですね。
それでそのカテゴリーを色にしましょうか。赤色(red)、青色(blue)、黄色(yellow)で分けて登録したとします。各カテゴリーは独立していて混ざらない条件にします。
普通の投稿のカテゴリー一覧ページのcategory.phpをtaxonomy.phpに変更して作成します。
このtaxonomy.phpがカスタム投稿のカテゴリー一覧ページになります。


slug === 'red'): ?>

赤色

slug === 'blue'):?>

青色

slug === 'yellow'):?>

黄色

まずはタイトル変更、上記のように記述するとそれぞれのカテゴリーで表示が変わります。



の上にカスタムカテゴリーのみ表示するように下記を追加します。

  'custom' ),$wp_query->query));?>

それでサイドバーをカスタム投稿用に作成しますsidebar-2.phpとして

 

で呼び出します。

まずは最近の投稿を取得します。

 get_post_type(), 'taxonomy' => $taxonomy_name, 'term' => 'coo', 'numberposts' => $numberposts));
elseif(is_tax($taxonomy_name,'blue')):
$tax_posts = get_posts(array('post_type' => get_post_type(), 'taxonomy' => $taxonomy_name, 'term' => 'officer', 'numberposts' => $numberposts));
elseif(is_tax($taxonomy_name,'yellow')):
$tax_posts = get_posts(array('post_type' => get_post_type(), 'taxonomy' => $taxonomy_name, 'term' => 'info' ,'numberposts' => $numberposts));
endif;
if($tax_posts):
?>
 
  • 最近の投稿

  • こんな感じで書いたらよいです。
    カテゴリーは

    
    

    でカスタム投稿のカテゴリーすべて出力されますが、同一カテゴリーのみの出力は以下の通り

      ID, 'custom'); foreach ($terms as $term) : ?>
    • name; ?>(count; ?>)

    月別アーカイブ表示ですがこれだけはカテゴリー別表示できず。。。。カスタム投稿すべての表示になってしまいます。
    functions.phpに以下記述した上で

    global $my_archives_post_type;
    add_filter( 'getarchives_where', 'my_getarchives_where', 10, 2 );
    function my_getarchives_where( $where, $r ) {
      global $my_archives_post_type;
      if ( isset($r['post_type']) ) {
        $my_archives_post_type = $r['post_type'];
        $where = str_replace( '\'post\'', '\'' . $r['post_type'] . '\'', $where );
      } else {
        $my_archives_post_type = '';
      }
      return $where;
    }
    
    add_filter( 'get_archives_link', 'my_get_archives_link' );
    function my_get_archives_link( $link_html ) {
      global $my_archives_post_type;
      if ( '' != $my_archives_post_type )
        $add_link .= '?post_type=' . $my_archives_post_type;
    	$link_html = preg_replace("/href=\'(.+)\'\s/","href='$1".$add_link."'",$link_html);
    
      return $link_html;
    }
    

    sidebar-2.phpに下記を記述します。

     'monthly', 'post_type' => 'blog', 'show_post_count' => true)); ?>
    

    カスタム投稿のカテゴリー別表示がわかったら更新しておきます。
    あとはsingle.phpですが、カスタム投稿用のsingle-custom.phpを作成しておきます。

    	
    
    

    の上にこれを記述します。

    ID, $c, 'red')):?>
    

    赤色

    ID, $c, 'blue')):?>

    青色

    ID, $c, 'yellow')):?>

    黄色

    そして同一カテゴリーでの前後リンクはプラグインで補います。
    http://wordpress.org/extend/plugins/ambrosite-nextprevious-post-link-plus/
    このプラグイン英語で書かれているのですが、以下の通り記述しても良いと思います。

     true,'in_same_tax' => true)); ?>
     true,'in_same_tax' => true)); ?>
    

    これでいけます!

    因みにカスタム投稿をダッシュボードに表示する場合は下記をfunctions.phpに書いたらOK!

    function custom_post_dashboard() {
     
    	$dashboard_custom_post_types= Array(
    		'custom',
    		'sonohoka'
    	);
     
    	foreach($dashboard_custom_post_types as $custom_post_type) {
    		global $wp_post_types;
    		$num_post_type = wp_count_posts($custom_post_type);
    		$num = number_format_i18n($num_post_type->publish);
    		$text = _n( $wp_post_types[$custom_post_type]->labels->singular_name, $wp_post_types[$custom_post_type]->labels->name, $num_post_type->publish );
    		$capability = $wp_post_types[$custom_post_type]->cap->edit_posts;
     
    		if (current_user_can($capability)) {
    			$num = "$num";
    			$text = "$text";
    		}
     
    		echo '';
    		echo '' . $num . '';
    		echo '' . $text . '';
    		echo '';
    	}
    }
    add_action('right_now_content_table_end', 'custom_post_dashboard');
    

    今回はカスタム投稿ポストタイプをcustomってしましたが各自ポストタイプを変更したら該当箇所も変更して下さいね。

    あとカスタム投稿と関係ないのですがカテゴリー別に出力できる方法を覚え書き用として残しておきます。

     'new',
        'posts_per_page' => 5,
        'orderby' => 'date',
        'order' => 'DESC'
    ));
    if ($cate_post ->have_posts()) :
    ?>
        

    新着記事

      have_posts()) : $cate_post ->the_post(); ?>
    • ()

    新着記事はありません

    ついでに同一カテゴリーでの前後リンクsigle.phpのしたにあるやつですね

    
    
    

    それからカテゴリー別に月別アーカイブ表示
    Archives for a categoryってプラグイン必須ですが、設定すれば下記の記述でOK

    wp_get_archives(array('type' => 'monthly', 'show_post_count' => true, 'cat' => 1));
    

    それからカテゴリー別最近の投稿表示

    wp_get_archives(array('type' => 'postbypost', 'cat' => 1, 'limit' => 5));
    

    ま~読みづらいかもしれませんが単純に覚え書きですのでご容赦を。。。

    remove_action( 'wp_head', 'feed_links_extra', 3 );
    remove_action( 'wp_head', 'feed_links', 2 );
    remove_action( 'wp_head', 'rsd_link' );
    remove_action( 'wp_head', 'wlwmanifest_link' );
    remove_action( 'wp_head', 'index_rel_link' );
    remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );
    remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );
    remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
    remove_action( 'wp_head', 'wp_generator' ); 
    

    functions.phpに上記は必須かな。結構いらない表示が多いのでコレで省きます。