Sắp xếp thứ tự hiển thị bài viết chuyên mục trong wordpress

Tùng Lê Ads |

Để tạo một plugin WordPress cho phép sắp xếp thứ tự bài viết trong từng mục chuyên sâu và hiển thị theo thứ tự sắp xếp của quản trị viên, bạn có thể làm theo các bước sau:

sắp xếp bài viết chuyên mục

1. Tạo tệp plugin

Tạo một tệp PHP mới, ví dụ: sap-xep-bai-viet.php, trong thư mục /wp-content/plugins/.

2. Thêm thông tin về plugin

Chèn đoạn mã sau vào file sap-xep-bai-viet.php vừa tạo ở trên:
/**
* Plugin Name: Custom Post Order by Category
* Description: Sắp xếp thứ tự bài viết trong từng mục chuyên sâu và hiển thị theo thứ tự sắp xếp trong quản trị viên.
* Version: 1.0
* Author: tungleads
*/

if (!defined('ABSPATH')) {
exit; // Chặn truy cập trực tiếp
}

add_action('admin_enqueue_scripts', 'cpo_enqueue_admin_scripts');
function cpo_enqueue_admin_scripts($hook) {
if ('edit.php' !== $hook) return;

wp_enqueue_script('jquery-ui-sortable');
wp_enqueue_script('cpo-admin-script', plugin_dir_url(__FILE__) . 'admin-script.js', ['jquery-ui-sortable'], '1.0', true);
wp_enqueue_style('cpo-admin-style', plugin_dir_url(__FILE__) . 'admin-style.css');
}

add_filter('manage_posts_columns', 'cpo_add_order_column');
function cpo_add_order_column($columns) {
$columns['order'] = 'Thứ tự';
return $columns;
}

add_action('manage_posts_custom_column', 'cpo_show_order_column', 10, 2);
function cpo_show_order_column($column, $post_id) {
if ('order' === $column) {
echo '' . get_post_meta($post_id, '_custom_order', true) . '';
}
}

add_action('wp_ajax_save_post_order', 'cpo_save_post_order');
function cpo_save_post_order() {
if (!isset($_POST['order']) || !is_array($_POST['order'])) {
wp_send_json_error('Invalid data');
}

foreach ($_POST['order'] as $index => $post_id) {
update_post_meta((int) $post_id, '_custom_order', $index + 1);
}

wp_send_json_success('Order updated');
}

add_action('pre_get_posts', 'cpo_set_custom_order');
function cpo_set_custom_order($query) {
if ($query->is_main_query() && !is_admin() && $query->is_category()) {
$query->set('meta_key', '_custom_order');
$query->set('orderby', 'meta_value_num');
$query->set('order', 'ASC');
}
}

3. Tạo tệp JavaScript và CSS trong thư mục /wp-content/plugins/.

  • admin-script.js:

jQuery(document).ready(function($) {
let list = $('.wp-list-table tbody');
list.sortable({
items: 'tr',
cursor: 'move',
axis: 'y',
update: function() {
let order = [];
list.find('.post-order').each(function() {
order.push($(this).data('id'));
});

$.post(ajaxurl, {
action: 'save_post_order',
order: order
});
}
});
});

  • admin-style.css:

.wp-list-table tbody tr {
cursor: move;
}

4. Kích hoạt plugin

  • Tải plugin lên thư mục /wp-content/plugins/.
  • Kích hoạt plugin trong trang quản trị WordPress.

5. Cập nhật cột "Thứ tự" để có khả năng sắp xếp

Thêm đoạn code dưới đây vào file function.php của themes

// Đánh dấu cột "Thứ tự" là cột có thể sắp xếp
add_filter('manage_edit-post_sortable_columns', 'cpo_make_order_column_sortable');
function cpo_make_order_column_sortable($columns) {
$columns['order'] = '_custom_order';
return $columns;
}

// Xử lý truy vấn sắp xếp khi nhấp vào cột "Thứ tự"
add_action('pre_get_posts', 'cpo_order_column_sort_query');
function cpo_order_column_sort_query($query) {
// Chỉ áp dụng cho trang quản trị và đúng danh sách bài viết
if (!is_admin() || !$query->is_main_query()) {
return;
}

// Kiểm tra tham số sắp xếp
if ('_custom_order' === $query->get('orderby')) {
$query->set('meta_key', '_custom_order');
$query->set('orderby', 'meta_value_num');
$query->set('order', $query->get('order') ? $query->get('order') : 'ASC'); // Mặc định là ASC
}
}

6. Kiểm tra kết quả

  • Trong trang quản trị, vào mục bài viết của từng chuyên mục để kéo thả sắp xếp.
  • Truy cập trang web để kiểm tra xem bài viết có hiển thị theo đúng thứ tự không.

Nếu cần thêm tính năng hoặc tùy chỉnh giao diện, bạn có thể mở rộng plugin này!