Làm cách nào để nhận thẻ cho loại bài đăng tùy chỉnh trong WordPress?

Josh Pollock viết về WordPress, phát triển chủ đề và plugin, đóng vai trò là người quản lý cộng đồng cho Pods Framework và ủng hộ nguồn mở… Thông tin thêm về Josh ↬

Bản tin email

Email (đập vỡ) của bạn

Mẹo hàng tuần về front-end & UX
Được hơn 200.000 người tin cậy

  • Làm cách nào để nhận thẻ cho loại bài đăng tùy chỉnh trong WordPress?
    Giao diện người dùng SmashingConf 2023

  • Làm cách nào để nhận thẻ cho loại bài đăng tùy chỉnh trong WordPress?
    Các mẫu thiết kế giao diện thông minh, khóa học 9h-video

  • Làm cách nào để nhận thẻ cho loại bài đăng tùy chỉnh trong WordPress?
    Quảng cáo trên tạp chí Smashing

  • Làm cách nào để nhận thẻ cho loại bài đăng tùy chỉnh trong WordPress?
    Các mẫu thiết kế giao diện Đào tạo UX

Hầu hết người dùng WordPress đều quen thuộc với các thẻ và danh mục cũng như cách sử dụng chúng để sắp xếp các bài đăng trên blog của họ. Nếu bạn sử dụng các loại bài đăng tùy chỉnh trong WordPress, bạn có thể cần tổ chức chúng như danh mục và thẻ. Danh mục và thẻ là ví dụ về nguyên tắc phân loại và WordPress cho phép bạn tạo bao nhiêu nguyên tắc phân loại tùy chỉnh tùy thích. Các nguyên tắc phân loại tùy chỉnh này hoạt động giống như danh mục hoặc thẻ, nhưng riêng biệt. Trong hướng dẫn này, chúng tôi sẽ giải thích các nguyên tắc phân loại tùy chỉnh và cách tạo chúng. Chúng tôi cũng sẽ xem xét các tệp mẫu nào trong chủ đề WordPress kiểm soát kho lưu trữ của các nguyên tắc phân loại tùy chỉnh và tích hợp cũng như một số kỹ thuật nâng cao để tùy chỉnh hành vi của kho lưu trữ phân loại

Hầu hết người dùng WordPress đều quen thuộc với các thẻ và danh mục cũng như cách sử dụng chúng để sắp xếp các bài đăng trên blog của họ. Nếu bạn sử dụng các loại bài đăng tùy chỉnh trong WordPress, bạn có thể cần tổ chức chúng như danh mục và thẻ. Danh mục và thẻ là ví dụ về nguyên tắc phân loại và WordPress cho phép bạn tạo bao nhiêu nguyên tắc phân loại tùy chỉnh tùy thích. Các nguyên tắc phân loại tùy chỉnh này hoạt động giống như danh mục hoặc thẻ, nhưng riêng biệt

Trong hướng dẫn này, chúng tôi sẽ giải thích các nguyên tắc phân loại tùy chỉnh và cách tạo chúng. Chúng tôi cũng sẽ xem xét các tệp mẫu nào trong chủ đề WordPress kiểm soát kho lưu trữ của các nguyên tắc phân loại tùy chỉnh và tích hợp cũng như một số kỹ thuật nâng cao để tùy chỉnh hành vi của kho lưu trữ phân loại

Đọc thêm trên SmashingMag.

  • Xây dựng trang lưu trữ tùy chỉnh cho WordPress
  • Thiết kế lưu trữ trang web. Thực hành tốt và ví dụ
  • Hướng dẫn chi tiết về các mẫu trang tùy chỉnh WordPress

Thuật ngữ

Trước khi tiếp tục, hãy nói thẳng thuật ngữ của chúng ta. Phân loại là một loại nội dung WordPress, được sử dụng chủ yếu để tổ chức nội dung của bất kỳ loại nội dung nào khác. Hai nguyên tắc phân loại mà mọi người đều quen thuộc được tích hợp sẵn. danh mục và thẻ. Chúng tôi có xu hướng gọi một bài đăng riêng lẻ của thẻ là "thẻ", nhưng để chính xác, chúng ta nên gọi nó là "thuật ngữ" trong phân loại "thẻ". Hầu như chúng tôi luôn đề cập đến các mục trong phân loại tùy chỉnh là “thuật ngữ. ”

Thêm sau khi nhảy. Tiếp tục đọc bên dưới ↓

Gặp gỡ “TypeScript trong 50 bài học”, hướng dẫn mới tuyệt vời của chúng tôi về TypeScript. Với các hướng dẫn chi tiết về mã, các ví dụ thực hành và các vấn đề phổ biến — tất cả được chia thành các bài học ngắn, dễ quản lý. Đối với những nhà phát triển biết đủ JavaScript để trở nên nguy hiểm

Chuyển đến mục lục ↬

Làm cách nào để nhận thẻ cho loại bài đăng tùy chỉnh trong WordPress?

Danh mục và thẻ đại diện cho hai loại nguyên tắc phân loại. phân cấp và không phân cấp. Giống như danh mục, phân loại phân cấp có thể có mối quan hệ cha-con giữa các thuật ngữ trong phân loại. Ví dụ: bạn có thể có trên blog của mình một danh mục “phim” có một số danh mục con, với các tên như “nước ngoài” và “trong nước”. ” Các nguyên tắc phân loại tùy chỉnh cũng có thể có thứ bậc, giống như danh mục hoặc không có thứ bậc, giống như thẻ

Làm cách nào để nhận thẻ cho loại bài đăng tùy chỉnh trong WordPress?
Một phần nhỏ của "Phân cấp mẫu WordPress". (Nguồn)

Kho lưu trữ của một phân loại là danh sách các bài đăng trong một phân loại được tạo tự động bởi WordPress. Ví dụ: đây sẽ là trang bạn nhìn thấy khi nhấp vào liên kết danh mục và xem tất cả các bài đăng trong danh mục đó. Chúng tôi sẽ xem xét cách thay đổi hành vi của các trang này và tìm hiểu tệp mẫu nào tạo ra chúng

Cách lưu trữ thẻ, danh mục và phân loại tùy chỉnh hoạt động

Đối với mọi danh mục, thẻ và phân loại tùy chỉnh, WordPress sẽ tự động tạo một kho lưu trữ liệt kê từng bài đăng được liên kết với phân loại đó, theo thứ tự thời gian đảo ngược. Hệ thống hoạt động thực sự tốt nếu bạn sắp xếp các bài đăng trên blog của mình theo danh mục và thẻ. Nếu bạn có một hệ thống tổ chức các loại bài đăng tùy chỉnh phức tạp với các nguyên tắc phân loại tùy chỉnh, thì đó có thể không phải là lý tưởng. Chúng tôi sẽ xem xét nhiều cách để sửa đổi các kho lưu trữ này

Bước đầu tiên để tùy chỉnh là biết tệp nào trong chủ đề của bạn được sử dụng để hiển thị kho lưu trữ. Các chủ đề khác nhau có các tệp mẫu khác nhau, nhưng tất cả các chủ đề đều có một mẫu


<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
2. Mẫu

<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
2 được sử dụng để hiển thị tất cả nội dung, trừ khi một mẫu tồn tại ở vị trí cao hơn trong hệ thống phân cấp. Hệ thống phân cấp mẫu của WordPress là hệ thống chỉ định tệp mẫu nào được sử dụng để hiển thị nội dung nào. Chúng tôi sẽ nhanh chóng xem qua hệ thống phân cấp mẫu cho các danh mục, thẻ và phân loại tùy chỉnh. Nếu bạn muốn tìm hiểu thêm, những tài nguyên này rất được khuyến khích

  • “Phân cấp mẫu,” WordPress Codex
  • “Hệ thống phân cấp mẫu,” Chip Bennett Biểu đồ dòng chảy
  • Hệ thống phân cấp mẫu WordPress. Một tài nguyên nhỏ, Rami Abraham và Michelle Schulp Một biểu đồ tương tác
  • Reveal Template, Scott Reilly Một plugin WordPress

Hầu hết các chủ đề đều có mẫu


<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
4, được sử dụng để lưu trữ danh mục và thẻ, cũng như lưu trữ ngày tháng và tác giả. Bạn có thể thêm tệp mẫu để xử lý lưu trữ danh mục và thẻ riêng. Các mẫu này sẽ được đặt tên tương ứng là

<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
5 hoặc

<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
6. Bạn cũng có thể tạo mẫu cho các thẻ hoặc danh mục cụ thể, sử dụng ID hoặc sên của danh mục hoặc thẻ. Ví dụ: một thẻ có ID là 7 sẽ sử dụng

<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
7, nếu nó tồn tại, thay vì

<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
6 hoặc

<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
4. Thẻ có sên "quả bơ" sẽ được hiển thị bằng cách sử dụng mẫu

<?php
    /* Plugin Name: Veggie Taxonomy */
    if ( ! function_exists( 'slug_veggies_tax' ) ) {

    // Register Custom Taxonomy
    function slug_veggies_tax() {

    $labels = array(
    'name'                          => _x( 'Vegetables', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'                 => _x( 'Vegetable', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                     => __( 'Taxonomy', 'text_domain' ),
    'all_Veggies'                   => __( 'All Veggies', 'text_domain' ),
    'parent_Veggie'                 => __( 'Parent Veggie', 'text_domain' ),
    'parent_Veggie_colon'           => __( 'Parent Veggie:', 'text_domain' ),
    'new_Veggie_name'               => __( 'New Veggie name', 'text_domain' ),
    'add_new_Veggie'                => __( 'Add new Veggie', 'text_domain' ),
    'edit_Veggie'                   => __( 'Edit Veggie', 'text_domain' ),
    'update_Veggie'                 => __( 'Update Veggie', 'text_domain' ),
    'separate_Veggies_with_commas'  => __( 'Separate Veggies with commas', 'text_domain' ),
    'search_Veggies'                => __( 'Search Veggies', 'text_domain' ),
    'add_or_remove_Veggies'         => __( 'Add or remove Veggies', 'text_domain' ),
    'choose_from_most_used'         => __( 'Choose from the most used Veggies', 'text_domain' ),
    'not_found'                     => __( 'Not Found', 'text_domain' ),
    );
    $args = array(
    'labels'                     => $labels,
    'hierarchical'               => false,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => false,
    );
    register_taxonomy( 'vegetable', array( 'post' ), $args );

    }

    // Hook into the 'init' action
    add_action( 'init', 'slug_veggies_tax', 0 );

    }
?>
0

Một điều khó khăn cần lưu ý là một mẫu được đặt tên theo một con sên sẽ ghi đè lên một mẫu được đặt tên theo số ID. Vì vậy, nếu một thẻ có sên là “avocado” có ID là 7, thì


<?php
    /* Plugin Name: Veggie Taxonomy */
    if ( ! function_exists( 'slug_veggies_tax' ) ) {

    // Register Custom Taxonomy
    function slug_veggies_tax() {

    $labels = array(
    'name'                          => _x( 'Vegetables', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'                 => _x( 'Vegetable', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                     => __( 'Taxonomy', 'text_domain' ),
    'all_Veggies'                   => __( 'All Veggies', 'text_domain' ),
    'parent_Veggie'                 => __( 'Parent Veggie', 'text_domain' ),
    'parent_Veggie_colon'           => __( 'Parent Veggie:', 'text_domain' ),
    'new_Veggie_name'               => __( 'New Veggie name', 'text_domain' ),
    'add_new_Veggie'                => __( 'Add new Veggie', 'text_domain' ),
    'edit_Veggie'                   => __( 'Edit Veggie', 'text_domain' ),
    'update_Veggie'                 => __( 'Update Veggie', 'text_domain' ),
    'separate_Veggies_with_commas'  => __( 'Separate Veggies with commas', 'text_domain' ),
    'search_Veggies'                => __( 'Search Veggies', 'text_domain' ),
    'add_or_remove_Veggies'         => __( 'Add or remove Veggies', 'text_domain' ),
    'choose_from_most_used'         => __( 'Choose from the most used Veggies', 'text_domain' ),
    'not_found'                     => __( 'Not Found', 'text_domain' ),
    );
    $args = array(
    'labels'                     => $labels,
    'hierarchical'               => false,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => false,
    );
    register_taxonomy( 'vegetable', array( 'post' ), $args );

    }

    // Hook into the 'init' action
    add_action( 'init', 'slug_veggies_tax', 0 );

    }
?>
0 sẽ ghi đè lên

<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
7, nếu nó tồn tại

Hệ thống phân cấp mẫu cho các nguyên tắc phân loại tùy chỉnh hơi khác một chút, bởi vì có các mẫu cho tất cả các nguyên tắc phân loại, cho các nguyên tắc phân loại cụ thể và cho các thuật ngữ cụ thể trong một nguyên tắc phân loại cụ thể. Vì vậy, hãy tưởng tượng rằng bạn có hai đơn vị phân loại, "trái cây" và "rau" và đơn vị phân loại "trái cây" có hai thuật ngữ, "táo" và "cam", trong khi "rau" có hai thuật ngữ, "cà rốt" và "cần tây". ” Hãy thêm ba mẫu vào chủ đề trang web của chúng tôi.


<?php
    /* Plugin Name: Veggie Taxonomy */
    if ( ! function_exists( 'slug_veggies_tax' ) ) {

    // Register Custom Taxonomy
    function slug_veggies_tax() {

    $labels = array(
    'name'                          => _x( 'Vegetables', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'                 => _x( 'Vegetable', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                     => __( 'Taxonomy', 'text_domain' ),
    'all_Veggies'                   => __( 'All Veggies', 'text_domain' ),
    'parent_Veggie'                 => __( 'Parent Veggie', 'text_domain' ),
    'parent_Veggie_colon'           => __( 'Parent Veggie:', 'text_domain' ),
    'new_Veggie_name'               => __( 'New Veggie name', 'text_domain' ),
    'add_new_Veggie'                => __( 'Add new Veggie', 'text_domain' ),
    'edit_Veggie'                   => __( 'Edit Veggie', 'text_domain' ),
    'update_Veggie'                 => __( 'Update Veggie', 'text_domain' ),
    'separate_Veggies_with_commas'  => __( 'Separate Veggies with commas', 'text_domain' ),
    'search_Veggies'                => __( 'Search Veggies', 'text_domain' ),
    'add_or_remove_Veggies'         => __( 'Add or remove Veggies', 'text_domain' ),
    'choose_from_most_used'         => __( 'Choose from the most used Veggies', 'text_domain' ),
    'not_found'                     => __( 'Not Found', 'text_domain' ),
    );
    $args = array(
    'labels'                     => $labels,
    'hierarchical'               => false,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => false,
    );
    register_taxonomy( 'vegetable', array( 'post' ), $args );

    }

    // Hook into the 'init' action
    add_action( 'init', 'slug_veggies_tax', 0 );

    }
?>
3,

<?php
    /* Plugin Name: Veggie Taxonomy */
    if ( ! function_exists( 'slug_veggies_tax' ) ) {

    // Register Custom Taxonomy
    function slug_veggies_tax() {

    $labels = array(
    'name'                          => _x( 'Vegetables', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'                 => _x( 'Vegetable', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                     => __( 'Taxonomy', 'text_domain' ),
    'all_Veggies'                   => __( 'All Veggies', 'text_domain' ),
    'parent_Veggie'                 => __( 'Parent Veggie', 'text_domain' ),
    'parent_Veggie_colon'           => __( 'Parent Veggie:', 'text_domain' ),
    'new_Veggie_name'               => __( 'New Veggie name', 'text_domain' ),
    'add_new_Veggie'                => __( 'Add new Veggie', 'text_domain' ),
    'edit_Veggie'                   => __( 'Edit Veggie', 'text_domain' ),
    'update_Veggie'                 => __( 'Update Veggie', 'text_domain' ),
    'separate_Veggies_with_commas'  => __( 'Separate Veggies with commas', 'text_domain' ),
    'search_Veggies'                => __( 'Search Veggies', 'text_domain' ),
    'add_or_remove_Veggies'         => __( 'Add or remove Veggies', 'text_domain' ),
    'choose_from_most_used'         => __( 'Choose from the most used Veggies', 'text_domain' ),
    'not_found'                     => __( 'Not Found', 'text_domain' ),
    );
    $args = array(
    'labels'                     => $labels,
    'hierarchical'               => false,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => false,
    );
    register_taxonomy( 'vegetable', array( 'post' ), $args );

    }

    // Hook into the 'init' action
    add_action( 'init', 'slug_veggies_tax', 0 );

    }
?>
4 và

<?php
    /* Plugin Name: Veggie Taxonomy */
    if ( ! function_exists( 'slug_veggies_tax' ) ) {

    // Register Custom Taxonomy
    function slug_veggies_tax() {

    $labels = array(
    'name'                          => _x( 'Vegetables', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'                 => _x( 'Vegetable', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                     => __( 'Taxonomy', 'text_domain' ),
    'all_Veggies'                   => __( 'All Veggies', 'text_domain' ),
    'parent_Veggie'                 => __( 'Parent Veggie', 'text_domain' ),
    'parent_Veggie_colon'           => __( 'Parent Veggie:', 'text_domain' ),
    'new_Veggie_name'               => __( 'New Veggie name', 'text_domain' ),
    'add_new_Veggie'                => __( 'Add new Veggie', 'text_domain' ),
    'edit_Veggie'                   => __( 'Edit Veggie', 'text_domain' ),
    'update_Veggie'                 => __( 'Update Veggie', 'text_domain' ),
    'separate_Veggies_with_commas'  => __( 'Separate Veggies with commas', 'text_domain' ),
    'search_Veggies'                => __( 'Search Veggies', 'text_domain' ),
    'add_or_remove_Veggies'         => __( 'Add or remove Veggies', 'text_domain' ),
    'choose_from_most_used'         => __( 'Choose from the most used Veggies', 'text_domain' ),
    'not_found'                     => __( 'Not Found', 'text_domain' ),
    );
    $args = array(
    'labels'                     => $labels,
    'hierarchical'               => false,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => false,
    );
    register_taxonomy( 'vegetable', array( 'post' ), $args );

    }

    // Hook into the 'init' action
    add_action( 'init', 'slug_veggies_tax', 0 );

    }
?>
5

Đối với các thuật ngữ trong phân loại "trái cây", tất cả các kho lưu trữ sẽ được tạo bằng cách sử dụng


<?php
    /* Plugin Name: Veggie Taxonomy */
    if ( ! function_exists( 'slug_veggies_tax' ) ) {

    // Register Custom Taxonomy
    function slug_veggies_tax() {

    $labels = array(
    'name'                          => _x( 'Vegetables', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'                 => _x( 'Vegetable', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                     => __( 'Taxonomy', 'text_domain' ),
    'all_Veggies'                   => __( 'All Veggies', 'text_domain' ),
    'parent_Veggie'                 => __( 'Parent Veggie', 'text_domain' ),
    'parent_Veggie_colon'           => __( 'Parent Veggie:', 'text_domain' ),
    'new_Veggie_name'               => __( 'New Veggie name', 'text_domain' ),
    'add_new_Veggie'                => __( 'Add new Veggie', 'text_domain' ),
    'edit_Veggie'                   => __( 'Edit Veggie', 'text_domain' ),
    'update_Veggie'                 => __( 'Update Veggie', 'text_domain' ),
    'separate_Veggies_with_commas'  => __( 'Separate Veggies with commas', 'text_domain' ),
    'search_Veggies'                => __( 'Search Veggies', 'text_domain' ),
    'add_or_remove_Veggies'         => __( 'Add or remove Veggies', 'text_domain' ),
    'choose_from_most_used'         => __( 'Choose from the most used Veggies', 'text_domain' ),
    'not_found'                     => __( 'Not Found', 'text_domain' ),
    );
    $args = array(
    'labels'                     => $labels,
    'hierarchical'               => false,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => false,
    );
    register_taxonomy( 'vegetable', array( 'post' ), $args );

    }

    // Hook into the 'init' action
    add_action( 'init', 'slug_veggies_tax', 0 );

    }
?>
4 vì không tồn tại mẫu dành riêng cho thuật ngữ. Mặt khác, thuật ngữ “cà rốt” trong kho lưu trữ phân loại “rau” sẽ được tạo bằng cách sử dụng

<?php
    /* Plugin Name: Veggie Taxonomy */
    if ( ! function_exists( 'slug_veggies_tax' ) ) {

    // Register Custom Taxonomy
    function slug_veggies_tax() {

    $labels = array(
    'name'                          => _x( 'Vegetables', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'                 => _x( 'Vegetable', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                     => __( 'Taxonomy', 'text_domain' ),
    'all_Veggies'                   => __( 'All Veggies', 'text_domain' ),
    'parent_Veggie'                 => __( 'Parent Veggie', 'text_domain' ),
    'parent_Veggie_colon'           => __( 'Parent Veggie:', 'text_domain' ),
    'new_Veggie_name'               => __( 'New Veggie name', 'text_domain' ),
    'add_new_Veggie'                => __( 'Add new Veggie', 'text_domain' ),
    'edit_Veggie'                   => __( 'Edit Veggie', 'text_domain' ),
    'update_Veggie'                 => __( 'Update Veggie', 'text_domain' ),
    'separate_Veggies_with_commas'  => __( 'Separate Veggies with commas', 'text_domain' ),
    'search_Veggies'                => __( 'Search Veggies', 'text_domain' ),
    'add_or_remove_Veggies'         => __( 'Add or remove Veggies', 'text_domain' ),
    'choose_from_most_used'         => __( 'Choose from the most used Veggies', 'text_domain' ),
    'not_found'                     => __( 'Not Found', 'text_domain' ),
    );
    $args = array(
    'labels'                     => $labels,
    'hierarchical'               => false,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => false,
    );
    register_taxonomy( 'vegetable', array( 'post' ), $args );

    }

    // Hook into the 'init' action
    add_action( 'init', 'slug_veggies_tax', 0 );

    }
?>
5. Bởi vì không tồn tại mẫu

<?php
    /* Plugin Name: Veggie Taxonomy */
    if ( ! function_exists( 'slug_veggies_tax' ) ) {

    // Register Custom Taxonomy
    function slug_veggies_tax() {

    $labels = array(
    'name'                          => _x( 'Vegetables', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'                 => _x( 'Vegetable', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                     => __( 'Taxonomy', 'text_domain' ),
    'all_Veggies'                   => __( 'All Veggies', 'text_domain' ),
    'parent_Veggie'                 => __( 'Parent Veggie', 'text_domain' ),
    'parent_Veggie_colon'           => __( 'Parent Veggie:', 'text_domain' ),
    'new_Veggie_name'               => __( 'New Veggie name', 'text_domain' ),
    'add_new_Veggie'                => __( 'Add new Veggie', 'text_domain' ),
    'edit_Veggie'                   => __( 'Edit Veggie', 'text_domain' ),
    'update_Veggie'                 => __( 'Update Veggie', 'text_domain' ),
    'separate_Veggies_with_commas'  => __( 'Separate Veggies with commas', 'text_domain' ),
    'search_Veggies'                => __( 'Search Veggies', 'text_domain' ),
    'add_or_remove_Veggies'         => __( 'Add or remove Veggies', 'text_domain' ),
    'choose_from_most_used'         => __( 'Choose from the most used Veggies', 'text_domain' ),
    'not_found'                     => __( 'Not Found', 'text_domain' ),
    );
    $args = array(
    'labels'                     => $labels,
    'hierarchical'               => false,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => false,
    );
    register_taxonomy( 'vegetable', array( 'post' ), $args );

    }

    // Hook into the 'init' action
    add_action( 'init', 'slug_veggies_tax', 0 );

    }
?>
8, tất cả các thuật ngữ khác trong "rau" sẽ được tạo bằng cách sử dụng

<?php
    /* Plugin Name: Veggie Taxonomy */
    if ( ! function_exists( 'slug_veggies_tax' ) ) {

    // Register Custom Taxonomy
    function slug_veggies_tax() {

    $labels = array(
    'name'                          => _x( 'Vegetables', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'                 => _x( 'Vegetable', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                     => __( 'Taxonomy', 'text_domain' ),
    'all_Veggies'                   => __( 'All Veggies', 'text_domain' ),
    'parent_Veggie'                 => __( 'Parent Veggie', 'text_domain' ),
    'parent_Veggie_colon'           => __( 'Parent Veggie:', 'text_domain' ),
    'new_Veggie_name'               => __( 'New Veggie name', 'text_domain' ),
    'add_new_Veggie'                => __( 'Add new Veggie', 'text_domain' ),
    'edit_Veggie'                   => __( 'Edit Veggie', 'text_domain' ),
    'update_Veggie'                 => __( 'Update Veggie', 'text_domain' ),
    'separate_Veggies_with_commas'  => __( 'Separate Veggies with commas', 'text_domain' ),
    'search_Veggies'                => __( 'Search Veggies', 'text_domain' ),
    'add_or_remove_Veggies'         => __( 'Add or remove Veggies', 'text_domain' ),
    'choose_from_most_used'         => __( 'Choose from the most used Veggies', 'text_domain' ),
    'not_found'                     => __( 'Not Found', 'text_domain' ),
    );
    $args = array(
    'labels'                     => $labels,
    'hierarchical'               => false,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => false,
    );
    register_taxonomy( 'vegetable', array( 'post' ), $args );

    }

    // Hook into the 'init' action
    add_action( 'init', 'slug_veggies_tax', 0 );

    }
?>
3

Sử dụng thẻ có điều kiện

Mặc dù bạn có thể thêm bất kỳ mẫu tùy chỉnh nào được liệt kê ở trên để tạo chế độ xem hoàn toàn độc đáo cho bất kỳ danh mục, thẻ, phân loại tùy chỉnh hoặc thuật ngữ phân loại tùy chỉnh nào, đôi khi tất cả những gì bạn muốn làm là thực hiện một hoặc hai thay đổi nhỏ. Trên thực tế, hãy cố gắng tránh tạo nhiều mẫu vì bạn sẽ cần điều chỉnh từng mẫu khi thực hiện các thay đổi tổng thể đối với đánh dấu HTML cơ bản mà bạn sử dụng trong mỗi mẫu trong chủ đề. Trừ khi tôi cần một mẫu hoàn toàn khác với mẫu của chủ đề


<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
4, tôi có xu hướng gắn bó với việc thêm các thay đổi có điều kiện vào

<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
4

WordPress cung cấp các chức năng có điều kiện để xác định xem một danh mục, thẻ hoặc phân loại tùy chỉnh có được hiển thị hay không. Để xác định xem kho lưu trữ danh mục có đang được hiển thị hay không, bạn có thể sử dụng


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
2 cho danh mục,

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
3 cho thẻ và

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
4 cho phân loại tùy chỉnh. Các hàm

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
3 và

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
2 cũng có thể kiểm tra danh mục hoặc thẻ cụ thể bằng slug hoặc ID. Ví dụ


<?php
    if ( is_tag() ) {
        echo "True for any tag!";
    }
    if ( is_tag( 'jedis' ) ) {
        echo "True for the tag whose slug is jedi";
    }
    if ( is_tag( array( 'jedi', 'sith' ) ) ) {
        echo "True for tags whose slug is jedi or sith";
    }
    if ( is_tag( 7 ) ) {
        echo "You can also use tag IDs. This is true for tag ID 7";
    }
?>

Đối với các nguyên tắc phân loại tùy chỉnh, hàm


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
4 có thể được sử dụng để kiểm tra xem có bất kỳ nguyên tắc phân loại nào (không bao gồm danh mục và thẻ), một nguyên tắc phân loại cụ thể hoặc một thuật ngữ cụ thể trong một nguyên tắc phân loại đang được hiển thị. Ví dụ


<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>

Tạo phân loại tùy chỉnh

Việc thêm phân loại tùy chỉnh có thể được thực hiện theo một trong ba cách. viết mã thủ công theo hướng dẫn trong Codex, điều mà tôi không khuyên dùng; . Plugin cho các loại nội dung tùy chỉnh cho phép bạn tạo các nguyên tắc phân loại tùy chỉnh và các loại bài đăng tùy chỉnh trong phần cuối của WordPress mà không phải viết bất kỳ mã nào. Sử dụng một là cách dễ nhất để thêm phân loại tùy chỉnh và để có được khung làm việc với các loại nội dung tùy chỉnh

Nếu bạn chọn một trong hai tùy chọn đầu tiên, thay vì plugin, thì bạn sẽ cần thêm mã vào tệp


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
8 của chủ đề hoặc vào một plugin tùy chỉnh. Tôi thực sự khuyên bạn nên tạo một plugin tùy chỉnh, thay vì thêm mã vào

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
8. Ngay cả khi bạn chưa bao giờ tạo plugin trước đây, tôi khuyên bạn nên làm điều đó. Mặc dù việc thêm mã vào

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
8 của chủ đề sẽ hoạt động, nhưng khi bạn chuyển đổi chủ đề (chẳng hạn như vì bạn muốn sử dụng một chủ đề mới hoặc để khắc phục sự cố), phân loại sẽ không còn hoạt động

Cho dù bạn viết mã phân loại tùy chỉnh của mình bằng cách làm theo hướng dẫn trong Codex hay bằng cách tạo mã bằng GenerateWP, chỉ cần dán mã đó vào tệp văn bản và thêm một dòng mã trước mã đó và bạn sẽ có plugin. Tải nó lên và cài đặt nó như bất kỳ plugin nào khác

Dòng duy nhất bạn cần để tạo plugin tùy chỉnh là


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
1

Dưới đây là một plugin để đăng ký phân loại tùy chỉnh có tên là “rau” mà tôi đã tạo bằng GenerateWP vì nó dễ dàng hơn nhiều và ít có khả năng chứa lỗi hơn so với thực hiện thủ công

________số 8_______

Nhân tiện, tôi đã tạo mã này bằng GenerateWP trong vòng chưa đầy hai phút. Dịch vụ này rất tuyệt và viết mã theo cách thủ công mà trang web này có thể tự động tạo cho bạn thật vô nghĩa. Để làm cho quá trình dễ dàng hơn, bạn có thể sử dụng plugin Pluginception để tạo một plugin trống cho bạn và sau đó dán mã từ GenerateWP vào đó bằng trình chỉnh sửa plugin của WordPress

Sử dụng WP_Query với phân loại tùy chỉnh

Khi bạn đã thêm một phân loại tùy chỉnh, bạn có thể muốn truy vấn các bài đăng có thuật ngữ trong phân loại đó. Để làm điều này, chúng ta có thể sử dụng truy vấn phân loại với


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
2

Truy vấn phân loại có thể rất đơn giản hoặc phức tạp. Truy vấn đơn giản nhất sẽ dành cho tất cả các bài đăng có thuật ngữ nhất định. Ví dụ: nếu bạn có một loại bài đăng có tên là “jedi” và một phân loại tùy chỉnh được liên kết có tên là “cấp độ”, thì bạn có thể nhận được tất cả các bậc thầy Jedi như thế này


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>

Nếu bạn đã thêm phân loại tùy chỉnh thứ hai có tên là "thời đại", thì bạn có thể tìm thấy tất cả các bậc thầy Jedi của Cộng hòa cũ như thế này


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>

Chúng ta cũng có thể thực hiện các phép so sánh phức tạp hơn bằng cách sử dụng đầy đủ


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
3. Đối số

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
3 cho phép chúng tôi tìm kiếm theo ID thay vì slug (như chúng tôi đã làm trước đây) và tìm kiếm nhiều hơn một thuật ngữ. Nó cũng cho phép chúng tôi kết hợp nhiều truy vấn phân loại và thiết lập mối quan hệ giữa hai. Ngoài ra, chúng ta thậm chí có thể sử dụng các toán tử SQL chẳng hạn như

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
5 để loại trừ các thuật ngữ

Khả năng là vô tận. Khám phá phần “” của trang Codex cho “Tham chiếu lớp/WP_Query” để biết thông tin đầy đủ. Đoạn mã bên dưới tìm kiếm loại bài đăng “jedi” của chúng tôi cho các hiệp sĩ và bậc thầy Jedi không thuộc thời Cộng hòa Cũ


<?php
    $args = array(
        'post_type' => 'jedi',
        'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => 'level',
                'field' => 'slug',
                'terms' => array( 'master', 'knight' )
            ),
            array(
                'taxonomy' => 'era',
                'field' => 'slug',
                'terms' => array( 'old-republic' ),
                'operator' => 'NOT IN'
                )
        )
    );
    $query = new WP_Query( $args );
?>

Tùy chỉnh kho lưu trữ phân loại

Cho đến nay, chúng tôi đã đề cập đến cách các nguyên tắc phân loại, thẻ và danh mục hoạt động theo mặc định, cũng như cách tạo các nguyên tắc phân loại tùy chỉnh. Nếu bất kỳ hành vi mặc định nào không phù hợp với nhu cầu của bạn, bạn luôn có thể sửa đổi nó. Chúng tôi sẽ giới thiệu một số cách để sửa đổi chức năng tích hợp sẵn của WordPress cho những bạn ít sử dụng WordPress làm nền tảng viết blog và sử dụng nhiều hơn như một hệ thống quản lý nội dung, thường yêu cầu phân loại tùy chỉnh

Xin chào pre_get_posts

Trước khi bất kỳ bài đăng nào được xuất ra bởi vòng lặp WordPress, WordPress sẽ tự động truy xuất các bài đăng cho người dùng theo trang họ đang truy cập, sử dụng lớp


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
2. Ví dụ: trong chỉ mục blog chính, nó nhận các bài đăng gần đây nhất. Trong một kho lưu trữ phân loại, nó nhận được các bài đăng gần đây nhất trong phân loại đó

Để thay đổi truy vấn đó, bạn có thể sử dụng bộ lọc


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
7 trước khi WordPress nhận bất kỳ bài đăng nào. Bộ lọc này hiển thị đối tượng truy vấn sau khi nó được đặt nhưng trước khi nó được sử dụng để thực sự nhận bất kỳ bài đăng nào. Điều này có nghĩa là bạn có thể sửa đổi truy vấn bằng các phương thức của lớp trước khi chạy vòng lặp WordPress chính. Nếu điều đó nghe có vẻ khó hiểu, đừng lo lắng — một vài phần tiếp theo của bài viết này sẽ đưa ra các ví dụ thực tế về cách thức hoạt động của điều này

Thêm các loại bài đăng tùy chỉnh vào kho lưu trữ danh mục hoặc thẻ

Một công dụng tuyệt vời của việc sửa đổi đối tượng


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
2 bằng cách sử dụng

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
7 là thêm các bài đăng từ loại bài đăng tùy chỉnh vào kho lưu trữ danh mục. Theo mặc định, các loại bài đăng tùy chỉnh không được bao gồm trong truy vấn này. Nếu chúng tôi đang xây dựng các đối số được chuyển đến

<?php
    $args = array(
        'post_type' => 'jedi',
        'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => 'level',
                'field' => 'slug',
                'terms' => array( 'master', 'knight' )
            ),
            array(
                'taxonomy' => 'era',
                'field' => 'slug',
                'terms' => array( 'old-republic' ),
                'operator' => 'NOT IN'
                )
        )
    );
    $query = new WP_Query( $args );
?>
0 và muốn bao gồm cả bài đăng thông thường và bài đăng trong loại bài đăng tùy chỉnh “jedi”, thì đối số của chúng ta sẽ như thế này


<?php
    $args = array( 'post_type' =>
        array(
            'post',
            'jedi'
        )
    );
?>

Trong cuộc gọi lại cho bộ lọc


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
7 của chúng tôi, chúng tôi cần chuyển một đối số tương tự. Vấn đề là đối tượng

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
2 đã tồn tại, vì vậy chúng ta không thể truyền đối số cho nó giống như khi tạo một thể hiện của lớp. Thay vào đó, chúng tôi sử dụng phương thức lớp

<?php
    $args = array(
        'post_type' => 'jedi',
        'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => 'level',
                'field' => 'slug',
                'terms' => array( 'master', 'knight' )
            ),
            array(
                'taxonomy' => 'era',
                'field' => 'slug',
                'terms' => array( 'old-republic' ),
                'operator' => 'NOT IN'
                )
        )
    );
    $query = new WP_Query( $args );
?>
3, cho phép chúng tôi thay đổi bất kỳ đối số nào sau khi lớp đã được tạo

Trong đoạn mã bên dưới, chúng tôi sử dụng


<?php
    $args = array(
        'post_type' => 'jedi',
        'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => 'level',
                'field' => 'slug',
                'terms' => array( 'master', 'knight' )
            ),
            array(
                'taxonomy' => 'era',
                'field' => 'slug',
                'terms' => array( 'old-republic' ),
                'operator' => 'NOT IN'
                )
        )
    );
    $query = new WP_Query( $args );
?>
3 để thay đổi đối số

<?php
    $args = array(
        'post_type' => 'jedi',
        'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => 'level',
                'field' => 'slug',
                'terms' => array( 'master', 'knight' )
            ),
            array(
                'taxonomy' => 'era',
                'field' => 'slug',
                'terms' => array( 'old-republic' ),
                'operator' => 'NOT IN'
                )
        )
    );
    $query = new WP_Query( $args );
?>
5 từ giá trị mặc định, là

<?php
    $args = array(
        'post_type' => 'jedi',
        'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => 'level',
                'field' => 'slug',
                'terms' => array( 'master', 'knight' )
            ),
            array(
                'taxonomy' => 'era',
                'field' => 'slug',
                'terms' => array( 'old-republic' ),
                'operator' => 'NOT IN'
                )
        )
    );
    $query = new WP_Query( $args );
?>
6, thành một mảng các loại bài đăng, bao gồm các bài đăng và loại bài đăng tùy chỉnh của chúng tôi “jedi. ” Lưu ý rằng chúng tôi đang sử dụng thẻ có điều kiện

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
2 để thay đổi chỉ xảy ra khi kho lưu trữ danh mục đang được hiển thị


<?php
    add_filter( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
    if ( $query->is_category() && $query->is_main_query()  )  {
        $query->set( 'post_type',
            array(
                'post',
                'jedi'
            )
        );
    }

    return $query;

    }
?>

Tham số


<?php
    $args = array(
        'post_type' => 'jedi',
        'tax_query' => array(
        'relation' => 'AND',
            array(
                'taxonomy' => 'level',
                'field' => 'slug',
                'terms' => array( 'master', 'knight' )
            ),
            array(
                'taxonomy' => 'era',
                'field' => 'slug',
                'terms' => array( 'old-republic' ),
                'operator' => 'NOT IN'
                )
        )
    );
    $query = new WP_Query( $args );
?>
8 của hàm này là đối tượng

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
2 trước khi nó được sử dụng để đưa vào vòng lặp chính. Vì một trang có thể bao gồm nhiều vòng lặp, chẳng hạn như các vòng lặp được sử dụng bởi tiện ích con, nên chúng tôi sử dụng hàm điều kiện

<?php
    $args = array( 'post_type' =>
        array(
            'post',
            'jedi'
        )
    );
?>
0 để đảm bảo rằng điều này chỉ ảnh hưởng đến vòng lặp chính và không ảnh hưởng đến bất kỳ vòng lặp phụ nào trên trang, chẳng hạn như vòng lặp được sử dụng bởi tiện ích con

Làm cho lưu trữ phân loại theo danh mục hoặc phân cấp theo thứ bậc

Theo mặc định, kho lưu trữ dành cho danh mục và các phân loại phân cấp khác hoạt động giống như bất kỳ kho lưu trữ phân loại nào khác. họ hiển thị tất cả các bài đăng trong danh mục đó hoặc với thuật ngữ phân loại đó. Để chỉ hiển thị các thuật ngữ gốc và loại trừ các thuật ngữ con, bạn sẽ sử dụng lại bộ lọc


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
7

Cũng giống như khi tạo


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
2 của riêng bạn cho các bài đăng trong phân loại, vòng lặp chính ____

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
2 sử dụng các đối số ___31_______3 để nhận các bài đăng theo phân loại.

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master',
        'era' => 'old-republic',
    );
    $query = new WP_Query( $args );
?>
3 có đối số

<?php
    $args = array( 'post_type' =>
        array(
            'post',
            'jedi'
        )
    );
?>
6, theo mặc định được đặt thành

<?php
    $args = array( 'post_type' =>
        array(
            'post',
            'jedi'
        )
    );
?>
7 hoặc

<?php
    $args = array( 'post_type' =>
        array(
            'post',
            'jedi'
        )
    );
?>
8. Bằng cách thay đổi nó thành

<?php
    $args = array( 'post_type' =>
        array(
            'post',
            'jedi'
        )
    );
?>
9 hoặc

<?php
    add_filter( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
    if ( $query->is_category() && $query->is_main_query()  )  {
        $query->set( 'post_type',
            array(
                'post',
                'jedi'
            )
        );
    }

    return $query;

    }
?>
0, chúng tôi có thể ngăn các bài đăng có cụm từ con được đưa vào kho lưu trữ


<?php
    add_action( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
        if ( is_tax( 'TAXONOMY NAME') )  {
            $tax_query = $query->tax_query->queries;
            $tax_query['include_children'] = 0;
            $query->set( 'tax_query', $tax_query );
        }

    }
?>

Kết quả nghe có vẻ mong muốn nhưng có một số thiếu sót lớn. Điều đó không sao, bởi vì nếu chúng tôi giải quyết những sai sót đó, chúng tôi sẽ thực hiện bước đầu tiên để tạo ra thứ gì đó rất tuyệt

Vấn đề đầu tiên và lớn nhất là kết quả không phải là một trang lưu trữ hiển thị các điều khoản con; . Vấn đề khác là chúng tôi không có cách tốt để điều hướng đến kho lưu trữ thuật ngữ con

Một cách hay để giải quyết vấn đề này là kết hợp bộ lọc


<?php
    add_filter( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
    if ( $query->is_category() && $query->is_main_query()  )  {
        $query->set( 'post_type',
            array(
                'post',
                'jedi'
            )
        );
    }

    return $query;

    }
?>
1 ở trên với một sửa đổi đối với mẫu hiển thị danh mục hoặc phân loại. Chúng tôi đã thảo luận trước đó về cách xác định mẫu nào được sử dụng để xuất danh mục hoặc kho lưu trữ phân loại tùy chỉnh. Ngoài ra, hãy nhớ rằng bạn luôn có thể gói các thay đổi của mình trong các thẻ có điều kiện, chẳng hạn như

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
2 hoặc

<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
4, nhưng điều đó có thể nhanh chóng trở nên khó sử dụng;

Bước đầu tiên là kiểm tra toàn bộ nội dung để xem liệu thuật ngữ phân loại hiện tại có con không. Nếu không, thì chúng tôi không muốn xuất bất cứ thứ gì. Để làm điều này, chúng tôi sử dụng


<?php
    add_filter( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
    if ( $query->is_category() && $query->is_main_query()  )  {
        $query->set( 'post_type',
            array(
                'post',
                'jedi'
            )
        );
    }

    return $query;

    }
?>
5, nó sẽ trả về một mảng trống nếu thuật ngữ hiện tại không có con và chúng tôi có thể kiểm tra điều đó với

<?php
    add_filter( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
    if ( $query->is_category() && $query->is_main_query()  )  {
        $query->set( 'post_type',
            array(
                'post',
                'jedi'
            )
        );
    }

    return $query;

    }
?>
6

Để thực hiện công việc này cho bất kỳ phân loại nào có thể được hiển thị, chúng ta cần lấy thuật ngữ phân loại và phân loại hiện tại từ mảng


<?php
    add_filter( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
    if ( $query->is_category() && $query->is_main_query()  )  {
        $query->set( 'post_type',
            array(
                'post',
                'jedi'
            )
        );
    }

    return $query;

    }
?>
7 của đối tượng toàn cầu

<?php
    add_filter( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
    if ( $query->is_category() && $query->is_main_query()  )  {
        $query->set( 'post_type',
            array(
                'post',
                'jedi'
            )
        );
    }

    return $query;

    }
?>
8. Sên của phân loại được chứa trong khóa

<?php
    add_filter( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
    if ( $query->is_category() && $query->is_main_query()  )  {
        $query->set( 'post_type',
            array(
                'post',
                'jedi'
            )
        );
    }

    return $query;

    }
?>
9 và sên của thuật ngữ nằm trong khóa

<?php
    add_action( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
        if ( is_tax( 'TAXONOMY NAME') )  {
            $tax_query = $query->tax_query->queries;
            $tax_query['include_children'] = 0;
            $query->set( 'tax_query', $tax_query );
        }

    }
?>
0

Để sử dụng


<?php
    add_filter( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
    if ( $query->is_category() && $query->is_main_query()  )  {
        $query->set( 'post_type',
            array(
                'post',
                'jedi'
            )
        );
    }

    return $query;

    }
?>
5, chúng ta phải có ID của thuật ngữ. ID không có trong

<?php
    add_filter( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
    if ( $query->is_category() && $query->is_main_query()  )  {
        $query->set( 'post_type',
            array(
                'post',
                'jedi'
            )
        );
    }

    return $query;

    }
?>
7, nhưng chúng ta có thể chuyển slug tới

<?php
    add_action( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
        if ( is_tax( 'TAXONOMY NAME') )  {
            $tax_query = $query->tax_query->queries;
            $tax_query['include_children'] = 0;
            $query->set( 'tax_query', $tax_query );
        }

    }
?>
3 để lấy nó

Đây là cách chúng tôi lấy tất cả thông tin mà chúng tôi cần vào các biến


<?php
    global $wp_query;
    $taxonomy = $wp_query->query_vars['taxonomy'];
    $term = $wp_query->query_vars['tax'];
    $term_id = get_term_by( 'slug', $term, $taxonomy );
    $term_id = $term_id->term_id;
    $terms = get_term_children( $term_id, $taxonomy );
?>

Bây giờ chúng tôi sẽ chỉ tiếp tục nếu


<?php
    add_action( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
        if ( is_tax( 'TAXONOMY NAME') )  {
            $tax_query = $query->tax_query->queries;
            $tax_query['include_children'] = 0;
            $query->set( 'tax_query', $tax_query );
        }

    }
?>
4 không phải là một mảng trống. Để xem liệu nó có trống trong séc của chúng tôi hay không, trước tiên, chúng tôi sẽ điền lại các điều khoản bằng cách sử dụng

<?php
    add_action( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
        if ( is_tax( 'TAXONOMY NAME') )  {
            $tax_query = $query->tax_query->queries;
            $tax_query['include_children'] = 0;
            $query->set( 'tax_query', $tax_query );
        }

    }
?>
5. Điều này là cần thiết vì

<?php
    add_action( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
        if ( is_tax( 'TAXONOMY NAME') )  {
            $tax_query = $query->tax_query->queries;
            $tax_query['include_children'] = 0;
            $query->set( 'tax_query', $tax_query );
        }

    }
?>
6 chỉ trả về một mảng ID và chúng tôi cần ID và tên, cả hai đều nằm trong đối tượng được trả về bởi

<?php
    add_action( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
        if ( is_tax( 'TAXONOMY NAME') )  {
            $tax_query = $query->tax_query->queries;
            $tax_query['include_children'] = 0;
            $query->set( 'tax_query', $tax_query );
        }

    }
?>
5. Chúng ta có thể lặp qua đối tượng này, xuất tên dưới dạng liên kết. Liên kết có thể được tạo bằng cách chuyển ID của thuật ngữ tới

<?php
    add_action( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
        if ( is_tax( 'TAXONOMY NAME') )  {
            $tax_query = $query->tax_query->queries;
            $tax_query['include_children'] = 0;
            $query->set( 'tax_query', $tax_query );
        }

    }
?>
8

Đây là mã hoàn chỉnh


<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
0

Tạo một trang đích tùy chỉnh cho kho lưu trữ phân loại

Nếu hệ thống phân loại phân cấp của bạn không có thuật ngữ nào trong thuật ngữ gốc, thì hệ thống lưu trữ phân loại thông thường sẽ không có tác dụng gì đối với bạn. Thay vào đó, bạn thực sự muốn hiển thị các liên kết phân loại

Trong trường hợp này, một lựa chọn tốt là tạo một trang đích tùy chỉnh cho thuật ngữ. Chúng tôi sẽ sử dụng lại


<?php
    add_filter( 'pre_get_posts', 'slug_cpt_category_archives' );
    function slug_cpt_category_archives( $query ) {
    if ( $query->is_category() && $query->is_main_query()  )  {
        $query->set( 'post_type',
            array(
                'post',
                'jedi'
            )
        );
    }

    return $query;

    }
?>
7 để xác định xem người dùng có ở trang đầu tiên của kho lưu trữ phân loại hay không;


<?php
    if ( is_tax() ) {
        echo "True for any custom taxonomy.";
    }
    if ( is_tax( 'vegetable' ) ) {
        echo "True for any term in the vegetable taxonomy.";
    }
    if ( is_tax( 'vegetable', 'celery' ) ) {
        echo "True only for the term celery, in the vegetable taxonomy.";
    }
?>
1

Cuộc gọi lại này trước tiên kiểm tra xem người dùng có thuộc phân loại mà chúng tôi muốn nhắm mục tiêu không. Chúng tôi có thể nhắm mục tiêu tất cả các nguyên tắc phân loại bằng cách thay đổi điều này thành chỉ


<?php
    $args = array(
        'post_type' => 'jedi',
        'level' => 'master'
    );
    $query = new WP_Query( $args );
?>
4. Sau đó, nó lấy trang hiện tại bằng cách sử dụng

<?php
    global $wp_query;
    $taxonomy = $wp_query->query_vars['taxonomy'];
    $term = $wp_query->query_vars['tax'];
    $term_id = get_term_by( 'slug', $term, $taxonomy );
    $term_id = $term_id->term_id;
    $terms = get_term_children( $term_id, $taxonomy );
?>
2 có tên là

<?php
    global $wp_query;
    $taxonomy = $wp_query->query_vars['taxonomy'];
    $term = $wp_query->query_vars['tax'];
    $term_id = get_term_by( 'slug', $term, $taxonomy );
    $term_id = $term_id->term_id;
    $terms = get_term_children( $term_id, $taxonomy );
?>
3 và nếu người dùng đang ở trang đầu tiên, thì nó sẽ trả về địa chỉ cho tệp mẫu mới. Nếu không, nó sẽ trả về tệp mẫu mặc định

Những gì bạn đặt trong tệp mẫu đó là tùy thuộc vào bạn. Bạn có thể tạo một danh sách các điều khoản sử dụng mã hiển thị ở trên. Bạn thực sự có thể sử dụng nó để xuất bất kỳ nội dung nào — ví dụ: thêm thông tin về thuật ngữ phân loại hoặc liên kết đến các bài đăng cụ thể

kiểm soát

Với một chút công việc, kiến ​​trúc cơ bản của WordPress, vẫn phản ánh nguồn gốc của nó là một nền tảng viết blog, có thể được tùy chỉnh để phù hợp với hầu hết mọi trang web hoặc ứng dụng Web. Sử dụng các nguyên tắc phân loại tùy chỉnh để tổ chức nội dung của bạn và thực hiện nội dung đó theo cách phù hợp với nhu cầu của bạn sẽ là một bước quan trọng trong nhiều dự án WordPress của bạn. Hy vọng rằng, bài đăng này đã đưa bạn đến một bước gần hơn để tận dụng tối đa khía cạnh mạnh mẽ này của WordPress