カスタム投稿タイプ functions.php custom post

http://wordpress.hitsuji.me/add-custom-posts-type/

1. カスタム投稿タイプを設定。
functions.php
—-
add_action('init', 'add_websites_post_type');
function add_websites_post_type() {
    $params = array(
            'labels' => array( // 各メニューの日本語訳。
                    'name' => _x('サイト', 'websites'),
                    'singular_name' => _x('サイト', 'websites'),
                    'add_new' => _x('新規追加', 'websites'),
                    'add_new_item' => _x('サイトを新規追加', 'websites'),
                    'edit_item' => _x('サイトを編集する', 'websites'),
                    'new_item' => _x('新規サイト', 'websites'),
                    'all_items' => _x('サイト一覧', 'websites'),
                    'view_item' => _x('サイトの説明を見る', 'websites'),
                    'search_items' => _x('検索する', 'websites'),
                    'not_found' => _x('サイトが見つかりませんでした。', 'websites'),
                    'not_found_in_trash' => _x('ゴミ箱内にサイトが見つかりませんでした。', 'websites')
            ),
            'hierarchical' => 'false', // 投稿形式。('true' 固定ページ形式)
            'public' => true, // 記事を公開&編集するなら ‘true’ を指定する。
            'query_var' => false, // trueだと『/?投稿名=記事のスラッグ』、falseだと『/?投稿名&p=記事のスラッグ』
            'menu_icon' => get_bloginfo('template_url').'/img/news_icon_s.jpg', // メニューに表示されるアイコン。
            'has_archive' => true, // アーカイブページを作るなら ‘true’ を指定する。
            'supports' => array( // 投稿編集画面に表示する入力項目。
                    'title',
                    'editor',
                    'author',
                    'thumbnail',
                    'excerpt',
                    'comments',
                    'trackbacks',
                    'custom-fields',
            ),
            'capability_type' => 'post', // 編集する権限レベル(投稿者)
            'taxonomies' => array('websites_category','websites_tag')
    );
    register_post_type('websites', $params);
    // 'websites' – カスタムと投稿タイプの名前。
    // デフォルトで使用されている投稿タイプ名
    // (post, page, attachment, revision, nav_menu_item)と名前が衝突しないようにします。
}

// サムネイル画像を利用
add_theme_support( 'post-thumbnails', array( 'websites' ) );
set_post_thumbnail_size( 150, 150, true );

// アイコンを追加
function add_menu_icons_styles(){
  echo '<style>
      #adminmenu #menu-posts-team div.wp-menu-image:before {
        content: "\f307";
      }
      </style>';
}
add_action( 'admin_head', 'add_menu_icons_styles' );
?>
—-

$params の引数

labels – この投稿タイプについて、ダッシュボードで表示される名前。連想配列で指定する。

supports  – 有効にする投稿機能を配列で指定する。今回は、タイトル(title)、本文(editor)、投稿者(author)、カスタムフィールド(custom-fields)の4つを有効にしたいので、array(‘title’,’editor’,’author’,’custom-fields’)を指定します。

taxonomies – 有効にするタクソノミー名を配列で指定する。
今回は、このカスタム投稿タイプ専用のカテゴリ&タグの名前を配列で指定します。
—-


2. カスタム投稿専用にタクソノミー(カテゴリとタグ)を作成。
(上記'website'用)

functions.php
—-
add_action('init', 'create_websites_taxonomies');
function create_websites_taxonomies() {
    // カテゴリを作成
    $labels = array(
            'name'                => 'Webカテゴリ',        //複数系のときのカテゴリ名
            'singular_name'       => 'Webカテゴリ',        //単数系のときのカテゴリ名
            'search_items'        => 'Webカテゴリを検索',
            'all_items'           => '全てのWebカテゴリ',
            'parent_item'         => '親カテゴリ',
            'parent_item_colon'   => '親カテゴリ:',
            'edit_item'           => 'Webカテゴリを編集',
            'update_item'         => 'Webカテゴリを更新',
            'add_new_item'        => '新規Webカテゴリを追加',
            'new_item_name'       => '新規Webカテゴリ',
            'menu_name'           => 'Webカテゴリ'        //ダッシュボードのサイドバーメニュー名
    );
    $args = array(
            'hierarchical'        => true,
            'labels'              => $labels,
            'rewrite'             => array( 'slug' => 'websites_cat' )
    );
    register_taxonomy( 'websites_category', 'websites', $args );
    // 'websites_category' —
    // 32文字以内の小文字英数字で指定します。また、予約語と衝突してもNGです。
    // http://codex.wordpress.org/Function_Reference/register_taxonomy#Reserved_Terms
    // に予約語一覧があるので、被らないように注意してください。
    // 'websites' —
    // 第二引数にタクソノミーを適用する投稿タイプを指定します。
    // デフォルトの投稿タイプ名(’post’など)、あるいはカスタム投稿タイプ名を、
    // 文字列または配列で指定します。適用先が1つなら、文字列でOKです。

補足:この名前はサイト運用中に変更することが出来ません。よく考えて付けた方がいいです。

    // タグを作成
    $labels = array(
            'name'                => 'Webタグ',        //複数系のときのタグ名
            'singular_name'       => 'Webタグ',        //単数系のときのタグ名
            'search_items'        => 'Webタグを検索',
            'all_items'           => '全てのWebタグ',
            'parent_item'         => null,
            'parent_item_colon'   => null,
            'edit_item'           => 'Webタグを編集',
            'update_item'         => 'Webタグを更新',
            'add_new_item'        => '新規Webタグを追加',
            'new_item_name'       => '新規Webタグ',
            'separate_items_with_commas'   => 'Webタグをコンマで区切る',
            'add_or_remove_items'          => 'Webタグを追加or削除する',
            'choose_from_most_used'        => 'よく使われているWebタグから選択',
            'not_found'                    => 'アイテムは見つかりませんでした',
            'menu_name'                    => 'Webタグ'        //ダッシュボードのサイドバーメニュー名
    );
    $args = array(
            'hierarchical'            => false,
            'labels'                  => $labels,
            'update_count_callback'   => '_update_post_term_count',    //タグの動作に必要なCallback設定
            'rewrite'                 => array( 'slug' => 'websites_tag' )
    );

    // タクソノミーを定義。
    register_taxonomy( 'websites_tag', 'websites', $args );
}
—-

$args の引数について
—-
labels  — この投稿タイプについて、ダッシュボードで表示される名前。連想配列で指定する。

hierarchical  —  階層型の分類ならtrue(カテゴリタイプ)、非階層ならfalse(タグタイプ)を指定する。

rewrite — タクソノミーページを表示するときのURLについて、連想配列で指定する。
デフォルトでは$taxonomy(websites_category, websites_tag)だが、これをslugオプションで変更できる。
書き方:’rewrite’ => array(‘slug’=>’websites_cat’)
※この値は、基本的に一度決めたら変更できません。良く考えて付けた方が良いです。

update_count_callback —
タグタイプのタクソノミーを利用したい場合は、コールバック関数として’_update_post_term_count’を指定する。
—-


3. ダッシュボードからカスタム記事をアップしてみる。メニューに追加されているはず。
サイト > 新規作成メニュー


4. 表示したいテンプレートにタグを追加する。

例: 自作テンプレートを sidebar.php で読み込み。

websiteslist.php

<div class="sidebar-wrapper">
    // カスタム投稿('websites')のアーカイブページのリンクを出力(echo を忘れないように)
    <h4 class="sidebar-title"><a href="<?php echo get_post_type_archive_link('websites') ?>">運営サイト</a></h4>
    <ul>
<?php
    // クエリを新規作成
    // post_type:投稿タイプ名を指定
    // showposts:表示記事数(-1を指定すると、全ての記事を出力))
    query_posts( array('post_type' => 'websites' ,'showposts' => -1 ) );
    while(have_posts()) {
        the_post();
        $title = get_the_title();
        $link = get_post_meta($post->ID, "url", true);
        // get_post_meta()は、カスタムフィールドの値を入手するためのWordPress関数です。
        // 引数で、記事のID番号、カスタムフィールド名、返り値の形の3つを指定します。
        // 第3引数にtrueを指定すると文字列、falseを指定すると配列で出力されます。

        echo '<li><a href="' . $link . '">' . $title . "</a></li>n";
    }
    wp_reset_query(); // query_posts()をリセット。
?>
    </ul>
</div>

呼び出す側の sidebar.php は
—-
<aside id="sidebar">
    <?php
     dynamic_sidebar(); // できれば事前に if (is_active_sidebar(ID)) : したほうが良い。
     get_template_part('websiteslist'); ?>
</aside>
—-


各URL は以下になる。('-cat' と '-tag' が追加される。)
—-
カスタム投稿のアーカイブ    http://localtest.net/websites/
(カスタム投稿タイプを作るときに、has_archive の値を true にしておくことが条件です。)
Webカテゴリのページ http://localtest.net/websites-cat/{category-slug}
Webタグのページ   http://localtest.net/websites-tag/{tag-slug}
—-

Leave a Reply

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