سلام وقت بخیر؛ ضمن خسته نباشید خدمت استاد صالحی و منتورهای دوره. من یک سری تغییرات توی کدهای استاد انجام دادم برای بخش نمایش سطح مقاله و نمایش دسته بندیها که شاید برای دوستان هم مفید باشه.
بخش اول save_meta_box:
function wdt_save_meta_box( $post_id ): void {
# Check if our nonce is set and verify the admin session to prevent CSRF.
$nonce_checks = [
'level_nonces' => 'level_nonce',
'post_cat_nonces' => 'post_cat_nonce',
];
foreach ( $nonce_checks as $nonce_field => $action ) {
if ( isset( $_POST[ $nonce_field ] ) && ! wp_verify_nonce( $_POST[ $nonce_field ], $action ) ) {
return;
}
}
# Check this is not an autosave.
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
# Check the user's permissions.
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
# Define the fields to sanitize
$fields_to_sanitize = [
'new_level' => 'post_level',
'post_cat' => 'post_cat',
];
# Loop through the fields and sanitize
foreach ( $fields_to_sanitize as $var_name => $post_field ) {
$$var_name = isset( $_POST[ $post_field ] ) ? sanitize_text_field( $_POST[ $post_field ] ) : '';
}
$meta_values_to_update = [
'_wdt_post_level' => $new_level,
'_wdt_post_cat' => $post_cat,
];
foreach ($meta_values_to_update as $meta_key => $meta_value) {
update_post_meta($post_id, $meta_key, $meta_value);
}
}
add_action( 'save_post', 'wdt_save_meta_box' );
سعی کردم بخشهای تکراری رو حذف کنم و همگی رو درقالب یک کد واحد اجرا کنم و از نوشتن کد تکراری جلوگیری کنم.
بخش دوم نمایش سطح دوره :
$level_value = get_post_meta( $post->ID, '_wdt_post_level', true );
$level_text = '';
$bg_class = '';
switch ($level_value) {
case 'basic':
$level_text = 'مقدماتی';
$bg_class = 'bg-info';
break;
case 'intermediate':
$level_text = 'متوسط';
$bg_class = 'bg-warning';
break;
case 'advanced':
$level_text = 'پیشرفته';
$bg_class = 'bg-danger';
break;
}
# Only display the div if $level_text is not empty
if (!empty($level_text)) {
echo '<div class="topic_level ' . esc_attr($bg_class) . ' text-white">سطح : ' . esc_html($level_text) . '</div>';
}
اومدم برای نمایش سطح دوره یکم کدهارو کوتاهتر کردم
بخش سوم نمایش دسته بندی:
# Get the categories assigned to this post
$categories = get_the_terms($post->ID, 'category');
# Check if the post has categories assigned
if (!empty($categories) && !is_wp_error($categories)) {
# Iterate through each category and display its name
foreach ($categories as $category) {
echo '<div class="topic_cat bg-dark-blue text-white">' . esc_html($category->name) . '</div>';
}
} else {
# Display a message if no categories are assigned
echo '<div class="topic_cat bg-warning text-white">دسته بندی نشده</div>';
}
مطلبی که استاد بهش اشاره کردن بنظرم بیشتر به درد ویجتها میخوره، مثلا بخش نمایش دسته بندیهای سایت و تعداد مطلب هر دسته بندی. برای همین بجای اینکه برای دسته بندی هم یک متاباکس درست کنم اومدم از دسته بندی پیشفرض خود وردپرس استفاده کردم.
توی کدها کامنت گذاشتم که هر بخش بیشتر قابل درک باشه. امیدوارم براتون مفید باشه