Skip to Content | Skip to Menus | Copyright?

Posted on

Secara default untuk mode artikel pada WordPress dikenal ada 2 macam post_type, Post dan Pages. Sederhananya, untuk artikel dinamis kita bisa menggunakan post_type post dan untuk artikel menggunakan Pages. Bagaimana bila kita ingin membuat album gallery dengan permalink dan tampilan desain layout yang berbeda dari post. Atau membuat klasifikasi data siswa, sementara post_type post tetap difungsikan sebagai klasifikasi berita.

Untuk itu kita bisa memanfaatkan fleksibilitas WordPress dengan membuat sendiri apa yang disebut dengan Custom Post Type ( CPT ). Kali ini kita akan simak bersama bagaimana membuat CPT mulai dari awal hingga beberapa kemungkinan tampilan yang bisa dihadirkan di front end.

Materi pembahasan akan melingkupi :

  • Membuat dan menyiapkan fitur untuk mode singular
  • Membuat custom taxonomy ( klasifikasi seperti halnya kategori )
  • pembuatan halaman archive untuk CPT
  • pembuatan navigasi pada mode single dan archive
  • ….menyusul ???

Mempertimbangkan bahwa CPT adalah ranah plugin dan sebaiknya tidak diletakkan sebagai bagian dari themes, maka pada tutorial ini kita akan membuatnya sebagai plugin. Dan untuk contoh kita akan buat CPT untuk katalog produk yang kita beri nama Katalogue.

PS: kenapa CPT sebaiknya diset sebagai plugin dan bukan bagian dari theme?
Simple saja penjelasannya. Bila CPT dipasang di themes, dan kita ganti theme yang tidak ada CPT yang sama, maka resikonya semua artikel terkait CPT ( berikut indeks search engine ) akan menjadi percuma dan menghasilkan halaman 404 !

Untuk kepentingan kenyamanan dalam membaca dan memahami materi tutorial ini, maka artikel dibuat secara berseri, mungkin dalam 2 atau 3 artikel.

Register CPT

Langkah pertama adalah mendaftarkan ( register ) CPT yang kita buat ke dalam system WordPress.

Tahapan yang harus dilakukan :

1. Menyusun label CPT

$labels = array(
            'name'               => __( 'Katalogues',                       'devio-playground' ),
            'singular_name'      => __( 'Katalogue',                        'devio-playground' ),
            'menu_name'          => __( 'Katalogues',                       'devio-playground' ),
            'name_admin_bar'     => __( 'Katalogue',                        'devio-playground' ),
            'add_new'            => __( 'Add New Katalogue',                'devio-playground' ),
            'add_new_item'       => __( 'Add New Katalogue',                'devio-playground' ),
            'edit_item'          => __( 'Edit Katalogue',                   'devio-playground' ),
            'new_item'           => __( 'New Katalogue',                    'devio-playground' ),
            'view_item'          => __( 'View Katalogue',                   'devio-playground' ),
            'search_items'       => __( 'Search Katalogue',                 'devio-playground' ),
            'not_found'          => __( 'No katalogues found',              'devio-playground' ),
            'not_found_in_trash' => __( 'No katalogues found in trash',     'devio-playground' ),
            'all_items'          => __( 'All Katalogues',                   'devio-playground' ),

            /* Labels for hierarchical post types only. */
            // 'parent_item'        => __( 'Parent Katalogue',                 'devio-playground' ),
            // 'parent_item_colon'  => __( 'Parent Katalogue:',                'devio-playground' ),

            /* Custom archive label.  Must filter 'post_type_archive_title' to use. */
            // 'archive_title'      => __( 'Katalogue',                       'devio-playground' ),
        );

Pada variabel $labels ini ditentukan sejumla h nama yang akan digunakan dalam administrasi CPT di dalam system WordPress. Bila diperhatikan dengan cermat, disini saya menggunakan mode translasi untuk tiap elemen label, sehingga bisa diaplikasikan untuk multi bahasa.

2. Rewrite mode

Pada tahapan ini diatur bagaimana permalink, apakah ada feed ( RSS artikel katalog ) …

$rewrite = array(
            'slug'       => 'katalogue',
            'pages'      => true,
            'feeds'      => false, 
            'ep_mask'    => EP_PERMALINK,
            )
        );

Keterangan :
slug : struktur dasar permalink menggunakan katalogue
pages :
feeds : CPT yang dibuat tidak menyediakan feed content ( RSS ), untuk mengaktifkan, ganti false menjadi true.
ep_mask :

3. Article Edit supports ( admin page )

Disini diatur apa dan bagaimana single CPT pada mode editor.

$supports = array(
            'title',
            'editor',
            'author',
            'thumbnail',
        );

Pada contoh …

4. Register Single Post Type

register_post_type( 'devio-katalogue', 
            array(
                    'labels'                => $labels,
                    'description'           => __( 'This is a description for my post type.', 'devio-playground' ),
                    'public'                => true, 
                    'publicly_queryable'    => true,
                    'exclude_from_search'   => false,
                    'show_in_nav_menus'     => false,
                    'show_ui'               => true,
                    'show_in_menu'          => true,
                    'show_in_admin_bar'     => true,
                    'menu_position'         => '5',
                    'menu_icon'             => null,
                    'can_export'            => true,
                    'delete_with_user'      => false,
                    'hierarchical'          => false,
                    'has_archive'           => false,
                    'query_var'             => true,
                    'capability_type'       => 'post',
                    'rewrite'               => $rewrite,
                    'supports'              => $supports,
                )
            )
        );

Saatnya kita gabung tahapan 1 – 4 menjadi satu fungsi siap saji.

function devio_register_post_type_katalogue()
    {
        $labels = array(
            'name'               => __( 'Katalogues',                       'devio-playground' ),
            'singular_name'      => __( 'Katalogue',                        'devio-playground' ),
            'menu_name'          => __( 'Katalogues',                       'devio-playground' ),
            'name_admin_bar'     => __( 'Katalogue',                        'devio-playground' ),
            'add_new'            => __( 'Add New Katalogue',                'devio-playground' ),
            'add_new_item'       => __( 'Add New Katalogue',                'devio-playground' ),
            'edit_item'          => __( 'Edit Katalogue',                   'devio-playground' ),
            'new_item'           => __( 'New Katalogue',                    'devio-playground' ),
            'view_item'          => __( 'View Katalogue',                   'devio-playground' ),
            'search_items'       => __( 'Search Katalogue',                 'devio-playground' ),
            'not_found'          => __( 'No katalogues found',              'devio-playground' ),
            'not_found_in_trash' => __( 'No katalogues found in trash',     'devio-playground' ),
            'all_items'          => __( 'All Katalogues',                   'devio-playground' ),

            /* Labels for hierarchical post types only. */
            // 'parent_item'        => __( 'Parent Katalogue',                 'devio-playground' ),
            // 'parent_item_colon'  => __( 'Parent Katalogue:',                'devio-playground' ),

            /* Custom archive label.  Must filter 'post_type_archive_title' to use. */
            // 'archive_title'      => __( 'Katalogue',                       'devio-playground' ),
        );

        $rewrite = array(
            'slug'       => DEV_KATALOGUE_SLUG,
            'pages'      => true,
            'feeds'      => false, 
            'ep_mask'    => EP_PERMALINK,
            )
        );

        $supports = array(
            'title',
            'editor',
            'author',
            'thumbnail',
        );
        /* Register the post type. */
        register_post_type( 'katalogue',
                array(
                    'labels'                => $labels,
                    'description'           => __( 'This is a description for my post type.', 'devio-playground' ),
                    'public'                => true, 
                    'publicly_queryable'    => true,
                    'exclude_from_search'   => false,
                    'show_in_nav_menus'     => false,
                    'show_ui'               => true,
                    'show_in_menu'          => true,
                    'show_in_admin_bar'     => true,
                    'menu_position'         => '5',
                    'menu_icon'             => null,
                    'can_export'            => true,
                    'delete_with_user'      => false,
                    'hierarchical'          => false,
                    'has_archive'           => false,
                    'query_var'             => true,
                    'capability_type'       => 'post',
                    'rewrite'               => $rewrite,
                    'supports'              => $supports,
                )
            )
        );
    }

dan untuk memanggil fungsi di atas, kita lakukan dengan hook action ‘init’ :

add_action( 'init', 'devio_register_post_type_katalogue' );

Sampai disini kita sudah berhasil membuat dan mendaftarkan CPT ke dalam system WordPress.

Membuat dan pengaturan custom taxonomy

Setelah pembuatan dan pengaturan untuk mode singular selesai, kini saatnya kita siapkan CPT yang dibuat untuk memiliki system kategori sendiri.

Menyusun label Custom taxonomy

Seperti halnya mode singular, untuk membuat custom taxonomy kita akan mulai dengan tahapan penyiapan label.

$labels = array(
   'name'                          => __( 'Katalogue Types',                           'devio-playground' ),
   'singular_name'                 => __( 'Katalogue Type',                            'devio-playground' ),
   'search_items'                  => __( 'Search Katalogue Type',                     'devio-playground' ),
   'popular_items'                 => __( 'Popular Katalogue Type',                    'devio-playground' ),
   'all_items'                     => __( 'All Katalogue Types',                       'devio-playground' ),
   'parent_item'                   => __( 'Parent Katalogue Types',                    'devio-playground' ),
   'parent_item_colon'             => __( 'Parent Katalogue Types:',                   'devio-playground' ),
   'edit_item'                     => __( 'Edit Katalogue Type',                       'devio-playground' ),
   'update_item'                   => __( 'Update Katalogue Type',                     'devio-playground' ),
   'add_new_item'                  => __( 'Add New Katalogue Type',                    'devio-playground' ),
   'new_item_name'                 => __( 'New Katalogue Type ',                       'devio-playground' ),
   'separate_items_with_commas'    => __( 'Separate Katalogue Types with commas',      'devio-playground' ),
   'add_or_remove_items'           => __( 'Add or remove Katalogue Types',             'devio-playground' ),
   'choose_from_most_used'         => __( 'Choose from the most used Katalogue Types', 'devio-playground' ),
   'menu_name'                     => __( 'Katalogue Types',                           'devio-playground' ),
);

Pengaturan mode rewrite

$rewrite = array(
            'slug'       => 'katalogue-type',//permalink slug untuk custom taxonomy
           );

Pengaturan mode capability

$capabilities = array(
                  'manage_terms'      => 'manage_options',
                  'edit_terms'        => 'manage_options',
                  'delete_terms'      => 'manage_options',
                  'assign_terms'      => 'manage_options'
                );

Register Custom Taxonomy

register_taxonomy( 'katalogue-type', //nama custom taxonomy
   array( 'katalogue' ), //nama CPT 
   array(
          'labels'            => $labels,
          'public'            => true,
          'show_in_nav_menus' => true,
          'show_ui'           => true,
          'show_tagcloud'     => true,
          'show_admin_column' => true,
          'hierarchical'      => true,
          'rewrite'           => $rewrite,
          'query_var'         => true,
          'capabilities'      => $capabilities,
        )
);

Perhatikan fungsi register_taxonomy() di atas, yang diberi tanda comment !

Dan seperti biasa, supaya penulisan kode custom taxonomy di atas bisa dipanggil dan terintegrasi dengan baik, maka langkah selanjutnya adalah menggabungkannya sebagai satu fungsi dan dipanggil dengan hook action init.

//Taxonomy for Katalogue
function devio_register_taxonomy_katalogue_type() 
{
  $labels = array(
   'name'                          => __( 'Katalogue Types',                           'devio-playground' ),
   'singular_name'                 => __( 'Katalogue Type',                            'devio-playground' ),
   'search_items'                  => __( 'Search Katalogue Type',                     'devio-playground' ),
   'popular_items'                 => __( 'Popular Katalogue Type',                    'devio-playground' ),
   'all_items'                     => __( 'All Katalogue Types',                       'devio-playground' ),
   'parent_item'                   => __( 'Parent Katalogue Types',                    'devio-playground' ),
   'parent_item_colon'             => __( 'Parent Katalogue Types:',                   'devio-playground' ),
   'edit_item'                     => __( 'Edit Katalogue Type',                       'devio-playground' ),
   'update_item'                   => __( 'Update Katalogue Type',                     'devio-playground' ),
   'add_new_item'                  => __( 'Add New Katalogue Type',                    'devio-playground' ),
   'new_item_name'                 => __( 'New Katalogue Type ',                       'devio-playground' ),
   'separate_items_with_commas'    => __( 'Separate Katalogue Types with commas',      'devio-playground' ),
   'add_or_remove_items'           => __( 'Add or remove Katalogue Types',             'devio-playground' ),
   'choose_from_most_used'         => __( 'Choose from the most used Katalogue Types', 'devio-playground' ),
   'menu_name'                     => __( 'Katalogue Types',                           'devio-playground' ),
  );

  $rewrite = array(
            'slug'       => 'katalogue-type',//permalink slug untuk custom taxonomy
           );

  $capabilities = array(
                  'manage_terms'      => 'manage_options',
                  'edit_terms'        => 'manage_options',
                  'delete_terms'      => 'manage_options',
                  'assign_terms'      => 'manage_options'
                );

  register_taxonomy( 'katalogue-type', //nama custom taxonomy
      array( 'katalogue' ), //nama CPT 
      array(
          'labels'            => $labels,
          'public'            => true,
          'show_in_nav_menus' => true,
          'show_ui'           => true,
          'show_tagcloud'     => true,
          'show_admin_column' => true,
          'hierarchical'      => true,
          'rewrite'           => $rewrite,
          'query_var'         => true,
          'capabilities'      => $capabilities,
      )
  );
}

dan action hook untuk memanggil fungsi devio_register_taxonomy_katalogue_type() adalah :

add_action( 'init', 'devio_register_taxonomy_katalogue_type' );

sampai ketemu lagi pada bagian 2 Tutorial CPT.

Last Modified on :

CopyRight & Left : ©2007 - now and forever

part of DeVio Multimedia

TOS - Help - Contact - About

Developed with DeVio Playground - Theme Framework