Làm thế nào để thêm một mục mặc định vào phân loại tùy chỉnh?


10

Phân loại mặc định của Wordpress (Danh mục) có mục Không được phân loại theo mặc định. Làm cách nào để thêm một mục mặc định vào phân loại tùy chỉnh mới?

Hàm.php:

// === CUSTOM TAXONOMIES === //
function my_custom_taxonomies() {
    register_taxonomy(
        'block',        // internal name = machine-readable taxonomy name
        'static_content',       // object type = post, page, link, or custom post-type
        array(
            'hierarchical' => true,
            'labels' => array(
                'name' => __( 'Blocks' ),
                'singular_name' => __( 'Block' ),
                'add_new_item' => 'Add New Block',
                'edit_item' => 'Edit Block',
                'new_item' => 'New Block',
                'search_items' => 'Search Block',
                'not_found' => 'No Block found',
                'not_found_in_trash' => 'No Block found in trash',
            ),
            'query_var' => true,    // enable taxonomy-specific querying
            'rewrite' => array( 'slug' => 'block' ),    // pretty permalinks for your taxonomy?
        )
    );
}
add_action('init', 'my_custom_taxonomies', 0);

EDIT: Tôi chỉ muốn có mục phân loại ở đó khi chủ đề được cài đặt. Nó không phải tự động được thêm vào bất kỳ thuật ngữ trống .

Câu trả lời:


7

Có một cái nhìn ở đây:

https://web.archive.org/web/20150403012347/http://wordpress.mfields.org/2010/set-default-terms-for-your-custom-taxonomies-in-wordpress-3-0/

Về cơ bản những gì bạn cần làm là sử dụng hook save_post để kiểm tra các điều khoản cho bài đăng và thêm thuật ngữ mặc định từ phân loại của bạn nếu nó trống.

Nếu bạn chỉ muốn có một thuật ngữ ban đầu được đặt trong phân loại tùy chỉnh, thì bạn có thể sử dụng wp_insert_term(). Có lẽ dễ nhất để thêm nó vào cùng chức năng mà bạn đang sử dụng để tạo phân loại tùy chỉnh của mình. Khi t3ios thêm vào các bình luận, bạn nên gọi get_term()trước và chỉ chèn thuật ngữ nếu giá trị trả về là null (nghĩa là thuật ngữ này không tồn tại).

Mã ví dụ này là từ Codex: http://codex.wordpress.org/Function_Reference/wp_insert_term

$parent_term = term_exists( 'fruits', 'product' ); // array is returned if taxonomy is given
$parent_term_id = $parent_term['term_id']; // get numeric term id
wp_insert_term(
  'Apple', // the term 
  'product', // the taxonomy
  array(
    'description'=> 'A yummy apple.', 
    'slug' => 'apple', 
    'parent'=> $parent_term_id
  )
);

@anu Tôi nghĩ rằng tôi đã không giải thích bản thân mình rất tốt, tôi chỉ muốn có phân loại đó ở đó khi chủ đề được cài đặt. Nó không phải bất kỳ điều khoản nếu nó trống.
janoChen

@janoChen - Tôi đã cập nhật câu trả lời
anu

@anu Tuyệt vời, tôi ước tôi có thể bình chọn câu trả lời của bạn nhiều hơn. Tôi chỉnh sửa các câu hỏi. Nơi chính xác tôi nên đặt mã mà bạn đã viết ở trên?
janoChen

Mã tôi đã thêm chỉ là một ví dụ (và nó từ mã WordPress) - vì vậy bạn sẽ cần sửa đổi nó khi cần thiết. Nơi tốt nhất để thêm nó sẽ là ngay trước khi kết thúc chức năng.
anu

1
Bạn chắc chắn muốn chạy insert trong hàm đó, nó chạy trên init, tức là. mỗi trang, tôi không nghĩ bạn muốn chạy phần chèn mỗi khi một trang được gọi phải không? Có thể hàm chèn trả về null / false nếu một thuật ngữ phù hợp đã tồn tại với tên đó (tôi không nhìn), nhưng tất cả đều giống nhau một chút không cần thiết (tại sao không gọi get_term (s) và xem nếu nó tồn tại, sau đó chèn nếu không).
t31os

4

Thể loại mặc định là trường hợp mã hóa cứng trong wp_insert_post()chức năng.

Vì vậy, nó không thể được sao chép chính xác, nhưng bạn có thể xử lý nó theo những cách khác. Tôi sẽ cố gắng chuyển sang trạng thái chuyển đổi bài đăng cho các bài đăng mới và gán thuật ngữ mặc định mong muốn nếu không được gán trong khi tạo bài đăng.


+1 để liên kết đến móc trạng thái bài đăng, đó chính xác là những gì tôi đang tìm kiếm.
Matt

0

Sử dụng plugin Thuật ngữ mặc định, bạn có thể làm điều này

register_taxonomy( 'custom-tax', array('post'), array(
    'label'              => 'Custom Tag',
    'public'             => true,
    'show_ui'            => true,
    'default_term'       => 'Some Default Term', // Add this line to your code 
// then activate and deactivate the default term plugin to save the terms you set.
));

Theo mặc định khi bài viết được gửi, nó sẽ lưu thuật ngữ mặc định vào bài viết nếu không có thuật ngữ nào được kiểm tra. Nó hoạt động cho cả phân loại phân cấp và không phân cấp.


Sẽ rất tuyệt nếu nó tự động chọn thuật ngữ được chỉ định trên chế độ xem tạo bài đăng, vì vậy người dùng biết điều gì sẽ xảy ra.
Garconis

0

Tôi cần phải tạo ra "Ngày" phân loại tùy chỉnh với các ngày trong tuần..Tôi không muốn khách hàng phải loay hoay với việc tạo ngày, hoặc vào đó và xóa ngày hoặc lỗi chính tả. Theo lời khuyên ở trên, tôi đã nghĩ ra điều này, nhưng tôi tự hỏi liệu có cách mã hóa nào ngắn gọn hơn không:

 /*************************************** ...Create a Custom Taxonomy for days ******************************/
add_action( 'init', 'build_taxonomies', 0 );  
function build_taxonomies() {  
    register_taxonomy( 
    'days', 
    'schedule',
   array( 'hierarchical' => true, 
    'label' => 'Days',
    'query_var' => true, 
    'show_ui' => false, //removes the menus from admin menu and edit panel  
    'rewrite' => true ) );  

/*---------------------------------------Check to see if the days are created..if not, create them----*/
$parent_term = term_exists( 'days', 'days' ); // array is returned if taxonomy is given
$parent_term_id = $parent_term['term_id']; // get numeric term id

wp_insert_term(//this should probably be an array, but I kept getting errors..
        'Monday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'monday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Tuesday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'tuesday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Wednesday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'wednesday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Thursday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'thursday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Friday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'friday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Saturday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'saturday',
        'parent'=> $parent_term_id ));

wp_insert_term(
        'Sunday', // the term 
        'days', // the taxonomy
        array(
        'slug' => 'sunday',
        'parent'=> $parent_term_id ));
}
/************ now I add my own meta box for days to get rid of extra controls *************/

add_action('admin_menu', 'add_custom_categories_box');
function add_custom_categories_box() {
 add_meta_box('myrelateddiv', 'Days*', 'ilc_post_related_meta_box', 'schedule', 'normal', 'low', array( 'taxonomy' => 'days' ));
}

function ilc_post_related_meta_box( $post, $box ) {
  $defaults = array('taxonomy' => 'related');
  if ( !isset($box['args']) || !is_array($box['args']) )
  $args = array();
  else
  $args = $box['args'];
  extract( wp_parse_args($args, $defaults), EXTR_SKIP );
  $tax = get_taxonomy($taxonomy);
?>

  <ul id="<?php echo $taxonomy; ?>checklist" class="list:<?php echo $taxonomy?> categorychecklist form-no-clear">
<?php
  wp_terms_checklist($post->ID, array( 'taxonomy' => $taxonomy, 'popular_cats' => $popular_ids, 'checked_ontop' => FALSE ) )
?>
</ul>   
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.