تعریف Custom Taxonomy در وردپرس – مقدمه:

در دهمین قسمت از چک لیست طراحی قالب وردپرس ، با یک سناریو واقعی برای ساخت قالب وردپرس ، می خواهیم تا با تعریف Custom Taxonomy ، یک طبقه بندی سفارشی در وردپرس ایجاد کنیم.

در این قسمت با نحوه کار تابع register_taxonomy آشنا خواهیم شد و در می یابیم که برای ساخت یک طبقه بندی سفارشی، چه پارامترهایی را باید داخل آن تنظیم نماییم.

تعریف Custom Taxonomy یکی از اصلی ترین ویژگی های وردپرس برای سفارشی سازی آن است. با یادگیری نحوه تعریف Custom Taxonomy در وردپرس، شما قابلیت سفارشی سازی هر محتوایی را در وردپرس خواهید داشت.

تعریف custom taxonomy

بخش اول: تعریف Custom Taxonomy در وردپرس

سایت رسمی وردپرس، تعریف Custom Taxonomy (همانند تعریف custom post type) را در قالب وردپرس پیشنهاد نمی کند. دلیل این کار این می باشد که کلیه اطلاعات مربوط به آن گروه بندی سفارشی، با سوئیچ کردن قالب توسط کاربر، همه ناپدید خواهد شد. بنابراین پیشنهاد وردپرس این است که به جای تعریف Custom Taxonomy در قالب از تعریف آن در پلاگین استفاده شود تا در صورت عوض شدن قالب وردپرس، اطلاعات مربوط به طبقه بندی سفارشی در سایت وردپرسی شما باقی بماند.

البته راهکارهای دیگری نیز برای این کار وجود دارد مانند استفاده از Must Use Plugin تا در هر صورت حتی با switch کردن بین تم ها، همچنان دسته بندی سفارشی شما در سایت وردپرسی شما قابل دسترس باشد. برای اطلاعات بیشتر می توانید به لینک مربوط به آن در پایین صفحه مراجعه کنید.

در قسمت قبل که مربوط به  تعریف custom post type بود، فرض کردیم که می خواهیم یک پست سفارشی با نام کتاب ایجاد کنیم. حال فرض کنید که تصمیم گرفته ایم این پست سفارشی، دو طبقه بندی سفارشی مجزا یا همان Custom Taxonomy تعریف نماییم. همچنین می خواهیم تا آن را در قالب وردپرس ایجاد کنیم.

فرض کنید یکی از این گروه بندی های سفارشی ژانر (یا همان ژانر کتاب بوده) که می خواهیم آن را به صورت سلسله مراتبی یا Hierarchical تعریف کنیم و دیگری گروه بندی نویسنده می باشد که نمی خواهیم به صورت سلسه مراتبی یا همان Hierarchical تعریف نماییم.

برای تعریف Custom Taxonomy با نام ژانر یا genre و همین طور نویسنده یا writer ، مراحل زیر را انجام می دهید:

  • ایجاد یک فایل با نام custom-post-type.php در دایرکتوری inc واقع در فولدر قالب وردپرس مورد نظر (شما می توانید از همان فایلی که در قسمت قبل این آموزش ساخته شده است، استفاده کنید)

  • فراخوانی این فایل در فایل functions.php با استفاده از دستور include

include get_template_directory() . '/inc/custom-post-type.php';
  • متصل نمودن تابع  create_book_taxonomies با استفاده از add_action به هوک init 

  • تعریف label های مورد استفاده برای رجیستر کردن  genre_custom_taxonomy  و writer_custom_taxonomy در داخل تابع  

  • تعریف آرگومان های لازم به صورت آرایه برای رجیستر کردن  genre_custom_taxonomy  و writer_custom_taxonomy

  • ثبت طبقه بندی سفارشی با استفاده از تابع register_taxonomy

// hook into the init action and call create_book_taxonomies when it fires
add_action( 'init', 'create_book_taxonomies', 0 );

// create two taxonomies, genres and writers for the post type "book"
function create_book_taxonomies() {
  // Add new taxonomy, make it hierarchical (like categories)
  $labels = array(
    'name'              => _x( 'Genres', 'taxonomy general name', 'textdomain' ),
    'singular_name'     => _x( 'Genre', 'taxonomy singular name', 'textdomain' ),
    'search_items'      => __( 'Search Genres', 'textdomain' ),
    'all_items'         => __( 'All Genres', 'textdomain' ),
    'parent_item'       => __( 'Parent Genre', 'textdomain' ),
    'parent_item_colon' => __( 'Parent Genre:', 'textdomain' ),
    'edit_item'         => __( 'Edit Genre', 'textdomain' ),
    'update_item'       => __( 'Update Genre', 'textdomain' ),
    'add_new_item'      => __( 'Add New Genre', 'textdomain' ),
    'new_item_name'     => __( 'New Genre Name', 'textdomain' ),
    'menu_name'         => __( 'Genre', 'textdomain' ),
  );

  $args = array(
    'hierarchical'      => true,
    'labels'            => $labels,
    'show_ui'           => true,
    'show_admin_column' => true,
    'query_var'         => true,
    'rewrite'           => array( 'slug' => 'genre' ),
  );

  register_taxonomy( 'genre', array( 'book' ), $args );

  // Add new taxonomy, NOT hierarchical (like tags)
  $labels = array(
    'name'                       => _x( 'Writers', 'taxonomy general name', 'textdomain' ),
    'singular_name'              => _x( 'Writer', 'taxonomy singular name', 'textdomain' ),
    'search_items'               => __( 'Search Writers', 'textdomain' ),
    'popular_items'              => __( 'Popular Writers', 'textdomain' ),
    'all_items'                  => __( 'All Writers', 'textdomain' ),
    'parent_item'                => null,
    'parent_item_colon'          => null,
    'edit_item'                  => __( 'Edit Writer', 'textdomain' ),
    'update_item'                => __( 'Update Writer', 'textdomain' ),
    'add_new_item'               => __( 'Add New Writer', 'textdomain' ),
    'new_item_name'              => __( 'New Writer Name', 'textdomain' ),
    'separate_items_with_commas' => __( 'Separate writers with commas', 'textdomain' ),
    'add_or_remove_items'        => __( 'Add or remove writers', 'textdomain' ),
    'choose_from_most_used'      => __( 'Choose from the most used writers', 'textdomain' ),
    'not_found'                  => __( 'No writers found.', 'textdomain' ),
    'menu_name'                  => __( 'Writers', 'textdomain' ),
  );

  $args = array(
    'hierarchical'          => false,
    'labels'                => $labels,
    'show_ui'               => true,
    'show_admin_column'     => true,
    'update_count_callback' => '_update_post_term_count',
    'query_var'             => true,
    'rewrite'               => array( 'slug' => 'writer' ),
  );

  register_taxonomy( 'writer', 'book', $args );
}

چند نکته در فراخوانی register_taxonomy: برای دیدن لیست کلیه پارامتر های مورد استفاده در این تابع، می توانید از لینک های زیر استفاده نمایید. ذکر چند نکته در مورد پارامترهای این تابع، در این بخش، خالی از لطف نیست که به آن ها اشاره می گردد:

  • در داخل تابع create_book_taxonomies ، شما متغیرهای label را تعریف خواهید کرد که شامل آرایه ای از تمامی برچسب ها و نام های موجود استفاده شده، در طبقه بندی سفارشی شما می باشد. شما می توانید از توابع ترجمه وردپرس استفاده کرده و آن ها را تعریف نمایید. ضمن اینکه می باید در انتهای هر بخش، text domain مورد نظر برای آن ها را هم ذکر کنید.

  • پس از تعریف label ها، شما متغیر args را تعریف می کنید که حاوی کلیه اطلاعات لازم برای ثبت کردن گروه بندی سفارشی شما می باشد. در واقع شما با این آرگومان ها، می توانید نحوه رفتار custom taxonomy خود در سایت وردپرس را مدیریت نمایید.

  • پارامتر rewrite برای وردپرس بیان می نماید که چگونه می باید url های مربوط به این رده بندی سفارشی شما را بازنویسی کند و به کاربر نمایش دهد.

  • پارامتر اول در تابع register_taxonomy با نام Taxonomy Key شناخته می شود که وردپرس برای ذخیره و بازیابی custom taxonomy شما، از آن استفاده خواهد کرد. بهتر است این اسم طوری انتخاب شود که با موارد دیگر تداخل نداشته و معنی و مفهوم آن را نیز، برساند.

  • پارامتر دوم تابع register_taxonomy که با نام object_type شناخته می شود، می تواند یک رشته یا آرایه ای از نوع های مختلف در وردپرس باشد. شما با تعریف این بخش، به وردپرس اعلام می کنید که این طبقه بندی سفارشی شما، برای کدام نوع ها (مثلا post یا page یا custom post type دلخواه) مورد استفاده قرار بگیرد. در مثال بالا، ما به وردپرس یاد آور شده ایم که این دسته بندی ها، فقط برای پست سفارشی کتاب یا همان book مورد استفاده قرار بگیرند.

نکته مهم:

مطالب فوق از فیلم های آموزشی طراحی قالب وردپرس گروه آموزشی سون لرن، برداشت شده و با تغییراتی در آن، به عنوان چک لیست در اینجا قرار داده شده است.

هدف ما، مرتب سازی این مطالب و داشتن چک لیست برای انجام تکراری کارهایی است که به طور روزمره، برای پروژه های طراحی قالب وردپرس انجام می دهیم. برای دسترسی به فیلم این آموزش ها به صورت کامل، می توانید به سایت سون لرن مراجعه فرمایید.

راهنما برای چک لیست طراحی قالب وردپرس:

شما می توانید از لینک های زیر به عنوان مرجع های اصلی برای چک لیست طراحی قالب وردپرس در قسمت بالا استفاده نمایید:

راهنما برای خواندن سایر مقالات سایت به صورت دسته بندی شده:

شما می توانید از طریق لینک های کاربردی زیر به سایر مقالات سایت که کاملا بصورت طبقه بندی شده وجود دارد، مراجعه نموده و از آن ها استفاده کنید: