نمایش term های یک پست در وردپرس
قبلا در پست مربوط به آشنایی با term ها در وردپرس در مورد نمایش لیست پست ها با term خاص صحبت نمودیم و گفتیم که تابع get_objects_in_term می تواند به راحتی این کار را برای ما انجام دهد و آیدی تمام مطالب را به صورت یک آرایه برگرداند و از آن پس می توانیم به راحتی با شی wp_query یا هر روش دیگر آنها را نمایش دهیم.
در این پست قرار است در مورد نحوه بدست آوردن و نمایش term های یک پست، راه های مختلفی را معرفی کنیم. معمولا term های یک پست در موارد مختلفی قابل نمایش است. مثلا در خلاصه مطلب (در سایت های فیلم و سریال خیلی استفاده می شود.) یا در صفحه مطلب می توانیم لیست آن ها را نمایش دهیم تا کاربران به سایر مطالب با آن term دسترسی داشته باشند.
تابع wp_get_object_terms برای دریافت کل term های پست
این تابع به این صورت کار می کند که آیدی مطلب (مطالب) و همچنین تکزانامی (های) موردنظر را می گیرد و اگر term موجود بود، آرایه ای از آبجکت های آن term ها را بر می گرداند. همچنین اگر taxonomy وارد شده معتبر نباشد، شی wp_error برگردانده می شود.
wp_get_object_terms( int|array $object_ids, string|array $taxonomies, string|array $args )
برای مثال کلیه term های تکزانامی category پست فعلی را به این صورت می توانیم دریافت می کنیم:
//input $terms = wp_get_object_terms( 3363, 'category' ); print_r($terms) //output Array ( [0] => WP_Term Object ( [term_id] => 131 [name] => آموزش وردپرس [slug] => %d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d9%88%d8%b1%d8%af%d9%be%d8%b1%d8%b3 [term_group] => 0 [term_taxonomy_id] => 131 [taxonomy] => category [description] => dasdas [parent] => 0 [count] => 1 [filter] => raw ) )
با یک forech ساده می توانیم اطلاعات آبجکت های term ها را در صفحه چاپ کنیم. مثلا برای نمایش نام کل term ها کافیست از دستور زیر استفاده کنیم:
$terms = wp_get_object_terms( 3363, 'category' ); foreach( $terms as $term ){ echo $term->name . '، '; }
فرض کنیم پست ما دارای چند تکزانامی است و میخواهیم آنها را به صورت تفکیک شده در صفحه نشان دهیم (مثلا تکزانامی های category و post_tag). در اینصورت نیاز نیست چندبار این تابع را فراخوانی کنیم.
$terms = wp_get_object_terms( 89, ['category', 'post_tag'] ); //show category terms foreach( $terms as $term ){ if( $term->taxonomy == 'category' ){ echo $term->name . ', '; } } //show post_tag terms foreach( $terms as $term ){ if( $term->taxonomy == 'post_tag' ){ echo $term->name . ', '; } }
پارامتر سوم این تابع جایی است که به ما امکان بیشتری برای شخصی سازی و فیلتر خروجی می دهد. می توانیم آرایه ای با مشخصات زیر را در آن وارد نماییم: (پارامترهای مهم آورده شده است)
array( 'orderby' => 'count', // 'order' => 'ASC', // 'include' => [], 'exclude' => [], 'exclude_tree' => [], //exclude term(s) and his child(s) 'number' => '', //count returned values 'fields' => 'all', //supported values => all, all_with_object_id, object_id, ids, tt_ids, id=>parent, names, count, id=>name, id=>slug 'name' => '', // 'slug' => '', // 'term_taxonomy_id' => '', // 'name__like' => '', // 'description__like' => '', // 'child_of' => '', //child parent id 'parent' => '', //first parent id 'childless' => false, // );