Để 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:
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!
Tin nổi bật
- Sắp xếp thứ tự hiển thị bài viết chuyên mục trong wordpress
- Sắp xếp thứ tự hiển thị danh mục sản phẩm trên website Wordpress
- Khắc phục tình trạng url zalo tài khoản này tạm thời không thể sử dụng...
- Khoá Học Google Ads Offline Từ Cơ Bản Đến Nâng Cao
- Plugin Wordpress theo dõi chuyển đổi quảng cáo Google Ads & Facebook...