English

Triển khai việc tổ chức và lựa chọn các nội dung phù hợp cho từng chủ đề - WordPress

cat.png

Tác giả

Phước Hữu

16/04/2023

Chia sẻ

wordpress.png

Triển khai việc tổ chức và lựa chọn các nội dung phù hợp cho từng chủ đề  - WordPress

Trong việc tổ chức nội dung trên trang web của bạn, có nhiều trường hợp mà bạn cần sắp xếp các bài viết theo từng chủ đề cụ thể, chẳng hạn như các bài viết về mèo hoặc chó. Hôm nay mình sẽ hướng dẫn các bạn làm điều đó thông qua một demo nho nhỏ. Trước tiên các bạn cần phải cài đặt phần mềm Local WP. Sau đó dùng phần mềm này để tạo ra một trang WordPress. Tiếp theo là cài đặt plugin Advanced Custom Fields, một plugin phổ biến để tổ chức các field cho một post-type hay một page, ....

1. Tổ chức thư mục:

└── my-theme/  
           ├── inc/ 
            │ ├── acf/  
            │  │ └── select-post-show-blog-about-product.php  
            │ └── index.php  
           ├── post-types/  
            │        └── product/  
            |          │       └── index.php
            |         └──index.php  
          └── page-blog-about-product.php  

  • my-theme: là theme mà bạn muốn sử dụng. 
  • inc: chứa các file dùng để custom các filed hay những gì mà bạn muốn cho dự án của mình. 
  • post-type: đúng như tên gọi dùng để quản lý cái post-type. 
  • page-blog-about-product.php: dùng để tạo ra một tamplate cho page Blog about product. 

2. Viết code

Đầu tiền các bạn nhớ import đầy đủ file:

acf/index.php

<?php
require_once get_template_directory() . "/inc/acf/select-post-show-blog-about-product.php";

post-types/index.php

<?php
require_once get_template_directory() . "/post-types/product/index.php";

function.php

add_filter("use_block_editor_for_post", "__return_false");

require_once get_template_directory() . "/inc/index.php";
require_once get_template_directory() . "/post-types/index.php";

Tạo ra một post-type là product để quản lý các sản phẩm của chúng ta

product/index.php

<?php
add_action('init', 'create_product_type');

function create_product_type()
{
  $labels = array(
    'name'          => _x('Product', 'post type general name'),
  );

  $rewrite = array(
    'slug'          => 'product'
  );

  $args = array(
    'labels'        => $labels,
    'description'   => 'Holds our custom product items',
    'public'        => true,
    'menu_position' => 10,
    'supports'      => array('title', 'editor', 'thumbnail'),
    'has_archive'   => true,
    'rewrite'       => $rewrite,
  );

  register_post_type('product', $args);
}

Ở demo này mình sẽ tạo một post-type để quả lý các product và một file select-post-show-blog-about-product.php dùng để tạo ra một field select lấy thông tin từ post-type product. Và dùng các function của ACF lấy ra các bài theo từng chủ đề mà bạn muốn.

Screenshot 2023-04-16 at 18-01-58 Product ‹ blog — WordPress.png

Ở đây mình sẽ tạo ví dụ 4 bài. Sau đó tạo ra một trang để hiển hị ra các bài viết này, ở đây mình tạo ra một trang có tên là Blog about product để lấy ra các bài viết.

Screenshot 2023-04-16 at 18-04-39 Edit Page “Blog about product” ‹ blog — WordPress.png

Mình sẽ dùng đoạn code sau để tạo ra một custom field select lấy ra hết các bài của post-type product

acf/select-post-show-blog-about-product.php

<?php
add_filter('acf/load_field/name=products', 'get_products');

function get_products($field)
{
  $choices = array();

  $args = array(
    'post_type'      => array('product'),
    'post_status'    => 'publish',
    'posts_per_page' => -1,
  );

  $query = new WP_Query($args);
  $posts = $query->posts;

  foreach ($posts as $post) {
    $key = $post->ID;
    $choices[$key] = $post->post_title;
  }

  $field['choices'] = $choices;

  return $field;
}

Sau đó mình sẽ dùng ACF để tạo ra các field cho trang Blog about product.

Screenshot 2023-04-16 at 19-25-32 Edit Field Group “Page – Blog about product” ‹ blog — WordPress.png

Screenshot 2023-04-16 at 19-27-02 Edit Field Group “Page – Blog about product” ‹ blog — WordPress.png
Screenshot 2023-04-16 at 19-27-45 Edit Field Group “Page – Blog about product” ‹ blog — WordPress.png

Sau khi chúng ta tạo được một custom field thì chúng ta chỉ cần gán cho một field cùng loại với tên của custom field chúng ta tạo thì các giá trị sẽ được lưu lại.

Screenshot 2023-04-16 at 18-12-50 Edit Page “Blog about product” ‹ blog — WordPress.png

Công việc của chúng ta lúc này là tổ chức dững liệu cho cho các field mà chúng ta đã tạo cho trang Blog about product. Sau đó dùng đoạn mã sau để lấy các dữ liệu đó ra:

<h1>Blog about product</h1>

<?php
if (have_rows('blogs')) :
  while (have_rows('blogs')) : the_row();
    $topic = get_sub_field('topic');
    echo '<h2>' . $topic . '</h2>';
    echo '<ul class="blogs">';
    if (have_rows('list_of_products')) :
      while (have_rows('list_of_products')) : the_row();
        $post_id      = get_sub_field('products');
        echo '<li>Id: ' . $post_id . ' title:' . get_the_title($post_id) . '</li>';
      endwhile;
    endif;
    echo '</ul>';
  endwhile;
endif;

Và kết quả chúng ta có được:

Screenshot 2023-04-16 at 18-16-34 Screenshot.png

Hy vọng qua bài viết này, bạn sẽ nhận được những cách tiếp cận độc đáo và sáng tạo để tổ chức các bài viết theo chủ đề theo ý muốn của bạn.

Các tài liệu tham khảo:

ACF | Advanced Custom Fields Plugin for WordPress

Page Templates | Theme Developer Handbook

Chia sẻ

Liên hệ