Code tạo chức năng seri bài viết

Wordpress Giza Data Tháng hai 13, 2023

Code này có chức năng tạo seri bài viết, quản lý seri như 1 dạng chuyên mục, và có thể chọn seri khi đăng bài viết mới hay chỉnh sửa bài viết.

Bước 1: Thêm code này vào file funtion của theme

/* seri bài viết */
function create_series_taxonomy() {
    $labels = array(
        'name' => 'Series',
        'singular_name' => 'Series',
        'search_items' => 'Search Series',
        'all_items' => 'All Series',
        'parent_item' => 'Parent Series',
        'parent_item_colon' => 'Parent Series:',
        'edit_item' => 'Edit Series',
        'update_item' => 'Update Series',
        'add_new_item' => 'Add New Series',
        'new_item_name' => 'New Series Name',
        'menu_name' => 'Series',
    );
    $args = array(
        'hierarchical' => true,
        'labels' => $labels,
        'show_ui' => true,
        'show_admin_column' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'series'),
    );
    register_taxonomy('series', 'post', $args);
}
add_action('init', 'create_series_taxonomy', 0);

function add_series_meta_box() {
    add_meta_box(
        'series_meta_box',
        'Series',
        'display_series_meta_box',
        'post',
        'side',
        'default'
    );
}
add_action('add_meta_boxes', 'add_series_meta_box');

function display_series_meta_box($post) {
    wp_nonce_field(basename(__FILE__), 'series_nonce');
    $series_terms = get_terms(array('taxonomy' => 'series', 'hide_empty' => false));
    $post_series = wp_get_post_terms($post->ID, 'series', array('fields' => 'ids'));
    foreach ($series_terms as $series_term) {
        echo '<input type="checkbox" name="series[]" value="' . $series_term->term_id . '" ' . checked(in_array($series_term->term_id, $post_series), true, false) . '> ' . $series_term->name . '<br>';
    }
}

function save_series_meta_box($post_id) {
    if (!isset($_POST['series_nonce']) || !wp_verify_nonce($_POST['series_nonce'], basename(__FILE__))) {
        return;
    }
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['series'])) {
        $series = array_map('intval', $_POST['series']);
        wp_set_object_terms($post_id, $series, 'series');
    } else {
        wp_set_object_terms($post_id, array(), 'series');
    }
}
add_action('save_post', 'save_series_meta_box');

Bước 2: Thêm code này vào file hiển thị nội dung bài viết

<!-- seri bài viết -->
<?php 
    $post_series = wp_get_post_terms(get_the_ID(), 'series'); 
    if (!empty($post_series)) { 
        $series_term = array_shift($post_series); 
        $series_posts = new WP_Query(array( 
            'posts_per_page' => -1, 
            'tax_query' => array( 
                array( 
                    'taxonomy' => 'series', 
                    'field' => 'term_id', 
                    'terms' => $series_term->term_id 
                ) 
            ) 
        )); 
        if ($series_posts->have_posts()) { 
            
            echo '<div class="seribaiviet">
            <h2>Seri bài viết: ' . $series_term->name . '</h2>
            '; 
            echo '<ul>'; 
            while ($series_posts->have_posts()) { 
                $series_posts->the_post(); 
                echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>'; 
            } 
            echo '</ul>
            </div>'; 
        } 
        wp_reset_postdata(); 
    } 
?>
<!-- end seri bài viết -->

Vậy là xong, tùy biết html và CSS theo sở thích của mình nhé.

Quảng Cáo