Web Dragon

【WordPress】超かんたん!!プラグインを使わずに置換するだけでカスタム投稿タイプを実装

いつも使っているのをまとめました!
カスタム投稿タイプと聞くと難しいイメージを持ってしまいがちですが、ウェブル様のまとめにより超簡単に実装することが出来ます!

今からちょうど3年前の記事を参考に色々カスタマイズしておりますが、まだまだ問題なく動作してます!
※だいぶ前の記事を参考にしてカスタマイズしたのでもしかしたらもっと効率的な記述方法があるかもしれません。。。それを考慮した上で下記のソースを使用してください。またどんなエラーがでても保障しかねますので、もし実装する場合にはご自身の責任で実装してください。



【ステップ1】
下記のソースをWordPressのテーマ内にあるfunctions.phpにコピペ。



/*------------------------------------------------


     ▼ カスタム投稿タイプ ▼


------------------------------------------------*/
class wbCustom
{
     function custom_post_type($title, $slug, $supports, $capability_type = 'post', $menu_position = 30)
    {
          $args = Array(
               'labels' => Array(
                'name' => _x($title, 'post type general name'),
                'singular_name' => _x($title, 'post type singular name'),
                'add_new' => _x($title . 'を追加', 'book'),
                'add_new_item' => __('新しい' . $title . 'を追加'),
                'edit_item' => __($title . 'を編集'),
                'new_item' => __('新しい' . $title),
                'view_item' => __($title . 'を編集'),
                'search_items' => __($title . 'を探す'),
                'not_found' =>  __($title . 'はありません'),
                'not_found_in_trash' => __('ゴミ箱に' . $title . 'はありません'),
                'parent_item_colon' => ''
            ),
            'public' => true,
            'publicly_queryable' => true,
            'show_ui' => true,
            'query_var' => true,
            'rewrite' => true,
            'capability_type' => $capability_type,
            'hierarchical' => false,
            'menu_position' => $menu_position,
            'has_archive' => true,
            'supports' => $supports
        );
        register_post_type($slug, $args);
    }

    function custom_taxonomies($taxName, $taxSlug, $postType){
        register_taxonomy(
            $taxSlug,
            $postType,
            array(
                'hierarchical' => true,
                'label' => $taxName,
                'singular_name' => $taxName,
                'query_var' => true,
                'rewrite' => true
            )
        );
    }
    
    function custom_tags($taxName, $taxSlug, $postType){
        register_taxonomy(
            $taxSlug,
            $postType,
            array(
                'hierarchical' => false,//タグとして扱う
                'label' => $taxName,
                'singular_name' => $taxName,
                'update_count_callback' => '_update_post_term_count',
                'rewrite' => array('slug' => 'tag')
            )
        );
    }

    function custom_post_dashboard($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 = "<a href='edit.php?post_type=" . $custom_post_type . "'>$num</a>";
            $text = "<a href='edit.php?post_type=" . $custom_post_type . "'>$text</a>";
        }

        echo '<tr>';
        echo '<td class="first b b_' . $custom_post_type . '">' . $num . '</td>';
        echo '<td class="t ' . $custom_post_type . '">' . $text . '</td>';
        echo '</tr>';
    }

}


/*----------------------------------------

カスタム投稿タイプを追加

----------------------------------------*/
function custom_post_type_set(){
    wbCustom::custom_post_type('●コレクション●', '★collection★', Array('title', 'editor'));
}
add_action('init', 'custom_post_type_set');



/*----------------------------------------

カテゴリー、タグ機能を実装

----------------------------------------*/
function custom_taxonomies_set(){
    wbCustom::custom_taxonomies('◆カテゴリー◆', '◆collection_category◆', '★collection★');
     wbCustom::custom_tags('▼タグ▼', '▲collection_tag▲', '★collection★');
}
add_action('init', 'custom_taxonomies_set', 0);



/*----------------------------------------

記事一覧でカテゴリー、タグも表示する

----------------------------------------*/
function manage_★collection★_columns ($columns) {
     $columns['◆collection_category◆'] = '◆カテゴリー◆';
     $columns['▲collection_tag▲'] = '▼タグ▼';
     return $columns;
}
function add_★collection★_column ($column, $post_id) {
     if ($column == '◆collection_category◆') {
          echo get_the_term_list($post_id, '◆collection_category◆', '', ', ', '');
     }
     if ($column == '▲collection_tag▲') {
          echo get_the_term_list($post_id, '▲collection_tag▲', '', ', ', '');
     }
}
add_filter('manage_edit-★collection★_columns', 'manage_★collection★_columns');
add_action('manage_posts_custom_column', 'add_★collection★_column', 10, 2);



/*----------------------------------------

記事一覧でカテゴリーでのフィルター機能を実装

----------------------------------------*/
add_action('restrict_manage_posts', 'add_post_taxonomy_restrict_filter');
function add_post_taxonomy_restrict_filter() {
    global $post_type;
    if ( '★collection★' == $post_type ) {
        ?>
        <select name="item_category">
            <option value="">--</option>
            <?php
            $terms = get_terms('◆collection_category◆');
            foreach ($terms as $term) { ?>
                <option value="<?php echo $term->slug; ?>"><?php echo $term->name; ?></option>
            <?php } ?>
        </select>
        <?php
    }
} 



【ステップ2】
下記の記号で囲まれたテキストを自分が追加したいカスタム投稿タイプの「名前」、「スラッグ」に変更し置換するだけ!



●コレクション●               //カスタム投稿タイプ名
★collection★               //スラッグ


◆カテゴリー◆               //タクソノミー名<br>
◆collection_category◆      //タクソノミースラッグ名<br>


▲collection_tag▲             //ターム名<br>
▼タグ▼                       //タームスラッグ名

たったこれだけで簡単にカスタム投稿タイプが出来ます!お試しあれ!
あと、パーマリンク設定の空更新(何も変更せずに「変更を保存」ボタンを押すだけ)もお忘れずに!!
※だいぶ前の記事を参考にしてカスタマイズしたのでもしかしたらもっと効率的な記述方法があるかもしれません。。。それを考慮した上で下記のソースを使用してください。またどんなエラーがでても保障しかねますので、もし実装する場合にはご自身の責任で実装してください。



【参考サイト】
WordPress でカスタム投稿タイプを簡単に拡張できるようにするコード | ウェブル