
Trong bài viết này, hnitmedia sẽ hướng dẫn bạn cách tạo một hệ thống thanh toán cho các bài viết trong WordPress, giúp bạn thêm giá cho mỗi bài viết và cho phép người dùng thanh toán để đọc bài viết đó. Dưới đây là mã code chi tiết để tích hợp tính năng này vào website WordPress của bạn.

1. Thêm Trường Giá Cho Bài Viết Trong Phần Admin
Đầu tiên, chúng ta sẽ thêm một trường nhập giá cho mỗi bài viết trong khu vực quản trị của WordPress. Trường này sẽ giúp người quản trị dễ dàng thiết lập giá cho các bài viết.
// Thêm trường giá cho bài viết trong phần Admin
function add_post_price_field() {
add_meta_box(
'post_price',
'Giá bài viết',
'post_price_callback',
'post',
'side',
'high'
);
}
add_action('add_meta_boxes', 'add_post_price_field');
// Hàm hiển thị trường giá
function post_price_callback($post) {
$price = get_post_meta($post->ID, '_post_price', true);
echo '<label for="post_price">Giá bài viết: </label>';
echo '<input type="text" id="post_price" name="post_price" value="' . esc_attr($price) . '" />';
}
// Lưu giá trị khi bài viết được lưu
function save_post_price($post_id) {
if (array_key_exists('post_price', $_POST)) {
update_post_meta(
$post_id,
'_post_price',
$_POST['post_price']
);
}
}
add_action('save_post', 'save_post_price');
2. Thêm Nút Thanh Toán Vào Bài Viết
Khi người dùng truy cập vào một bài viết có giá, nếu họ chưa thanh toán, chúng ta sẽ hiển thị một nút “Thanh toán để đọc bài viết”. Nút này sẽ dẫn họ tới trang thanh toán.

// Thêm nút thanh toán vào bài viết nếu có giá và chưa thanh toán
function add_payment_button_to_post($content) {
if (is_single() && is_user_logged_in()) {
global $post;
// Lấy giá bài viết
$price = get_post_meta($post->ID, '_post_price', true);
if (!empty($price) && $price > 0) {
// Kiểm tra nếu người dùng đã thanh toán bài viết
$has_paid = get_user_meta(get_current_user_id(), 'has_paid_for_' . $post->ID, true);
if (!$has_paid) {
// Tạo link thanh toán
$payment_url = esc_url(add_query_arg('post_id', $post->ID, get_permalink($post->ID)));
$content .= '<div class="payment-button">
<a href="' . $payment_url . '" class="button">Thanh toán để đọc bài viết</a>
</div>';
}
}
}
return $content;
}
add_filter('the_content', 'add_payment_button_to_post');
3. Thêm Bài Viết Vào Giỏ Hàng WooCommerce Khi Thanh Toán
Khi người dùng nhấn vào nút thanh toán, bài viết sẽ được thêm vào giỏ hàng WooCommerce dưới dạng sản phẩm ảo.

// Thêm bài viết vào giỏ hàng WooCommerce khi người dùng nhấn nút thanh toán
function add_post_to_cart() {
if (isset($_GET['post_id']) && is_user_logged_in()) {
$post_id = intval($_GET['post_id']);
$price = get_post_meta($post_id, '_post_price', true);
if (!empty($price) && $price > 0) {
// Tạo sản phẩm ảo cho bài viết
$product_id = create_virtual_product_for_post($post_id, $price);
if ($product_id) {
// Thêm sản phẩm vào giỏ hàng
WC()->cart->add_to_cart($product_id);
// Chuyển hướng đến trang thanh toán WooCommerce
wp_redirect(wc_get_checkout_url());
exit;
}
}
}
}
add_action('template_redirect', 'add_post_to_cart');
4. Tạo Sản Phẩm Ảo Cho Bài Viết
Mỗi bài viết có giá sẽ được tạo một sản phẩm ảo trong WooCommerce. Sản phẩm này sẽ ẩn khỏi cửa hàng nhưng vẫn có thể được thanh toán.
5. Kiểm Tra Người Dùng Đã Thanh Toán Hay Chưa Trước Khi Đọc Bài Viết
Cuối cùng, chúng ta cần kiểm tra xem người dùng đã thanh toán bài viết chưa. Nếu chưa, họ sẽ chỉ thấy phần đầu của bài viết và được yêu cầu thanh toán trước khi tiếp tục đọc.
6. Cập Nhật Giá Sản Phẩm Ảo Khi Giá Bài Viết Thay Đổi
Cuối cùng, khi giá của bài viết thay đổi, giá của sản phẩm ảo trong WooCommerce cũng cần được cập nhật.
// Cập nhật giá sản phẩm ảo trong WooCommerce khi giá bài viết thay đổi
function update_product_price_on_post_save($post_id) {
// Kiểm tra xem có phải bài viết không
if (get_post_type($post_id) !== 'post') {
return;
}
// Lấy giá bài viết
$price = get_post_meta($post_id, '_post_price', true);
if (!empty($price) && $price > 0) {
// Kiểm tra sản phẩm ảo liên kết với bài viết
$product_id = get_post_meta($post_id, '_product_id', true);
if ($product_id) {
// Cập nhật giá sản phẩm trong WooCommerce
$product = wc_get_product($product_id);
if ($product) {
$product->set_regular_price($price);
$product->save();
}
}
}
}
add_action('save_post', 'update_product_price_on_post_save');
Kết Luận
Với đoạn code trên, bạn đã có thể tạo một hệ thống thanh toán cho các bài viết trong WordPress, cho phép người dùng thanh toán để đọc các bài viết có giá. Hệ thống này sử dụng WooCommerce để xử lý thanh toán và tạo sản phẩm ảo cho mỗi bài viết có giá. Hãy thử ngay và xem kết quả!