تکسانومی / Taxonomy چیست : در ادمین وردپرس بخش نوشته ها ما ۲ گزینه دسته ها و برچسب ها را داریم به این دو اصطلاحا تکسانومی ها / Taxonomies گفته میشود که وظیفه آن طبقه بندی و دسته بندی یک پست تایپ خاص هست حال میتواند پست تایپ پیش فرض وردپرس با نام نوشته ها باشد یا پست تایپی که خودمان به صورت سفارشی اضافه کرده ایم باشد. در صورتی که با پست تایپ ها آشنایی ندارید اینجا کلیک کنید.
در وردپرس در صورتی که می خواهید پست های خود را بر اساس روش هایی علاوه بر دسته بندی و برچسب های پیش فرض خود وردپرس دسته بندی و بعدا فیلتر کنید می توانید یک custom taxonomy ایجاد کنید و پست ها را بر آن اساس دسته بندی کنید. دو مدل تکسانومی داریم که شامل موارد زیر است.
تکسانومی ها را هم در فایل فانکشن قالب میتوان ایجاد کرد و هم در پلاگین، پیشنهاد ما افزودن تکسانومی به صورت پلاگین میباشد چون ارتباط مستقیم با پست تایپ ها دارد و اگر کاربر قالب وردپرس خود را تعویض کند همه این کد ها از بین میرود و بخشی از اطلاعات یا کانتنت ها از بین میروند ولی اگر به صورت پلاگین باشد این مشکل پیش نمی آید.
در کد های خود فقط از حروف کوچک استفاده کنید تا به مشکل نخورید.
کد های تکسانومی : قطعه کد زیر کل کد های مورد نیاز جهت رجیستر تکسانومی های مدل سلسله مراتبی-دسته و غیر سلسله مراتبی-برچسب میباشد. که در ادامه توضیحات کامل آن را میآورم.
add_action( 'init', 'tin_register_taxonomies', 0 );
function tin_register_taxonomies() {
// Add new categories taxonomy
$labels = array(
'name' => 'نوع محصولات',
'singular_name' => 'نوع محصول',
'menu_name' => 'نوع محصول',
'all_items' => 'همه انواع محصول',
'edit_item' => 'ویرایش نوع محصول',
'view_item' => 'مشاهده نوع محصول',
'update_item' => 'بروزرسانی نوع محصول',
'add_new_item' => 'افزودن نوع محصول جدید',
'new_item_name' => 'عنوان نوع محصول',
'parent_item' => 'مادر',
'parent_item_colon' => 'مادر:',
'search_items' => 'جستجو',
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'hierarchical' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
'show_in_quick_edit' => true,
'show_admin_column' => true,
'capabilities' => array(
'manage_terms' => 'manage_categories',
'edit_terms' => 'manage_categories',
'delete_terms' => 'manage_categories',
'assign_terms' => 'edit_posts',
),
'rewrite' => array( 'slug' => 'product-type' ),
);
register_taxonomy( 'tin_product_type', array( 'tin_pt_product' ), $args );
// Add new tag taxonomy
$labels = array(
'name' => 'رنگ ها',
'singular_name' => 'رنگ',
'menu_name' => 'رنگ ها',
'all_items' => 'همه رنگ ها',
'edit_item' => 'ویرایش رنگ',
'view_item' => 'مشاهده رنگ',
'update_item' => 'بروزرسانی رنگ',
'add_new_item' => 'افزودن رنگ جدید',
'new_item_name' => 'عنوان رنگ جدید',
'parent_item' => null,
'parent_item_colon' => null,
'search_items' => 'جستجوی رنگ',
'popular_items' => 'رنگ های محبوب',
'separate_items_with_commas' => 'رنگ ها را با ویرگول جدا کنید.',
'add_or_remove_items' => 'افزودن یا حذف رنگ ها',
'choose_from_most_used' => 'انتخاب از رنگهای بیشتر استفاده شده.',
'not_found' => 'هیچ رنگی پیدا نشد',
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'public' => true,
'rewrite' => array( 'slug' => 'product-color' ),
);
register_taxonomy( 'tin_product_color', 'tin_pt_product', $args );
}
هوک ایجاد تکسانومی : توسط این هوک که به init قلاب می اندازد، یک فانکشن جهت رجیستر تکسانومی وارد میکنیم. این هوک ۳ ورودی میگیرد که شامل موارد زیر است :
add_action( 'init', 'tin_register_taxonomies', 0 );
تابع رجیستر کردن تکسانومی ها : توسط کد زیر ما ۲ تکسانومی سلسله مراتبی-دسته و غیر سلسله مراتبی-برچسب خود را رجیستر میکنیم. و ۳ ورودی میگیرند که شامل موارد زیر است :
register_taxonomy( 'tin_product_type', array( 'tin_pt_product' ), $args );
register_taxonomy( 'tin_product_color', array( 'tin_pt_product' ), $args );
public : اگر مقدار آن true باشد ما در سمت فرانت به آن دسترسی خواهیم داشت. و اگر مقدار آن false باشد ما فقط از طریق کد نویسی به آن دسترسی خواهیم داشت.
اگر مقدار public برابر با true باشد موارد زیر به صورت پیش فرض مقادیر زیر را میگیرند. البته میتوان آن ها را تغییر داد.
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
publicly_queryable : قابلیت کوئری زدن را فعال و غیر فعال میکند، مثلا ما در دسته ها می توانیم لینک محتوا های مربوط به یک دسته یا برچسب را از طریق مرورگر و url مشاهده کنیم. اگر مقدار آن false باشد همه این لینک ها و کوئری ها از بین میرود و اگر true باشد میتوانیم به آن ها دسترسی داشته باشیم.
اگر بابر با false باشد از طریق فرانت و آدرس بار دیگر نمیشود به آن دسترسی داشت یعنی در پنل ادمین وجود دارد و در سمت فرانت یا سایت دسترسی به آن مقدور نیست. مثلا مثل دسته ها و یا برچسب های وردپرس که نامک یا url ای دارند که بتوان به آن دسترسی داشت از طریق مرورگر، اگر false باشد این امکان غیر فعال میشود، اگر مقدار برابر true باشد دقیقا عکس عمل میکند.
hierarchical : تنها تفاوت تکسانومی های مدل سلسله مراتبی یا همان دسته ها و غیر سلسله مراتبی یا همان برچسب ها در این بخش مشخص میشود اگر true باشد بخش سلسله مراتبی برای آن ایجاد میشود یعنی دارای والد یا همان مادر میشود و اگر false باشد مانند tag ها عمل میکند بدون والد.
تفاوت برچسب ها و تگ ها توسط قابلیت hierarchical مشخص میشود که true باشد یا false .
show_ui : اگر مقدار آن false باشد دیگر در پنل ادمین نمایش داده نمیشود حتی در منو داشبورد مثلا زمانی که بخواهیم خودمان یک رابط کاربری اختصاصی برای تکسانومی تولید و طراحی کنیم کاربرد دارد. و اگر مقدار برابر true باشد دقیقا عکس عمل میکند.
show_in_menu : اگر false باشد دیگر در منوی پنل ادمین نمایش داده نمیشود و فرق آن با publicly_queryable در این است که در show_in_menu فقط منو حذف شده و از طریق url میشود به آن دسترسی داشت اما در publicly_queryable از طریق url هم نمیشود به آن دسترسی داشت. و اگر مقدار برابر true باشد دقیقا عکس عمل میکند.
show_in_nav_menus : اگر مقدار آن false باشد دیگر نمیتوان از بخش منو ها-فهرست ها آن را به فهرست یا منو ای اضافه کرد. و اگر مقدار برابر true باشد دقیقا عکس عمل میکند اگر در بخش منو ها نیامد باید آن را از بخش تنظیمات صفحه اضافه کنید.
show_tagcloud : اگر برابر با false باشد در بخش ویجت ها آن را حذف میکند و نمیگزارد که آن را مثلا به ویجت ابر برچسب اضافه کنیم. و اگر true باشد برعکس عمل میکند.
show_in_quick_edit : اگر true باشد در بخش ویرایش سریع پست تایپ، زمانی که کلیک میکنیم تکسانومی ما نیز در آن بخش نمایش داده شود و اگر false باشد نمایش داده نشود.
show_admin_column : اگر true باشد در بخشی که همه پست تایپ ها در پنل ادمین نمایش داده میشود، ستونی هم برای تکسانومی ما در نظر میگیرد و اگر false باشد نمایش داده نشود.
capabilities : برای تعیین سطح دسترسی استفاده میشود مثلا فقط ادمین قابلیت حذف یک کتگوری را داشته باشد. یک آرایه میگیرد ما برخی از قابلیت های آن را برای شما آورده ایم که به شرح ذیل است :
https://wordpress.org/support/article/roles-and-capabilities/
rewrite : توسط این بخش میتوانیم نامک کلی تکسانومی خود در url را تغییر دهیم. یک آرایه میگیرد و کافی است مقدار slug را در آن مقدار دهی کنیم.
توجه داشته باشید که در تکسانومی ها نیز مثل پست تایپ ها باید پیوند های یکتا را فلاش کنیم.
فرقی نمیکند که برای تکسانومی سلسله مراتبی یا تکسانومی غیر سلسله مراتبی بخواهیم یک صفحه اختصاصی بسازیم ۳ راه برای این کار وجود دارد.
taxonomy.php
taxonomy-taxonomy name.php
taxonomy-taxonomy name-slug name.php
توجه : میتوانید برای حلقه ها و کوئری ها از همان کد های صفحه آرشیو استفاده کنید.