Thêm trường tùy chỉnh vào Danh mục


22

Tôi muốn thêm các trường tùy chỉnh vào một danh mục nhất định. Một danh mục chỉ có các trường sau:

Tên:

Sên:

Cha mẹ:

Sự miêu tả:

Vì tôi có Trang web về TV Series, tôi muốn thêm một số trường nữa, tôi muốn một cái gì đó như thế này, khi tôi tạo một danh mục mới (Danh mục = Sê-ri)

Tên:

Nghệ sĩ:

Năm:

Kiểu:

Thể loại:

Tóm lược:

Sên:

Cha mẹ:

Sự miêu tả:

Và cứ thế ...

Có ai giúp đỡ không? Cảm ơn trước.



Đây là một bảng cheat tôi sử dụng khi làm điều này. Nó có các móc & bộ lọc hành động có liên quan trong một danh sách ngắn. charlestonsw.com/ Quảng cáo
Lance Cleveland

Câu trả lời:


24

Tôi đã đăng một Làm thế nào để về nó một tuần trước đây http://en.bainternet.info/2011/wordpress-category-extra-fields

hi vọng điêu nay co ich.

Ôi trời.


Dưới đây là chi tiết của bài viết:

Điều đầu tiên chúng ta cần làm là thêm các trường bổ sung vào biểu mẫu chỉnh sửa danh mục bằng cách sử dụng hook edit_carget_form_fields và chúng tôi sử dụng một chức năng đơn giản sẽ in ra các trường bổ sung.

<?php
//add extra fields to category edit form hook
add_action ( 'edit_category_form_fields', 'extra_category_fields');

//add extra fields to category edit form callback function
function extra_category_fields( $tag ) {    //check for existing featured ID
    $t_id = $tag->term_id;
    $cat_meta = get_option( "category_$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Image Url'); ?></label></th>
<td>
<input type="text" name="Cat_meta[img]" id="Cat_meta[img]" size="3" style="width:60%;" value="<?php echo $cat_meta['img'] ? $cat_meta['img'] : ''; ?>"><br />
        <span class="description"><?php _e('Image for category: use full url with '); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra1]" id="Cat_meta[extra1]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra1'] ? $cat_meta['extra1'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra2"><?php _e('extra field'); ?></label></th>
<td>
<input type="text" name="Cat_meta[extra2]" id="Cat_meta[extra2]" size="25" style="width:60%;" value="<?php echo $cat_meta['extra2'] ? $cat_meta['extra2'] : ''; ?>"><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra3"><?php _e('extra field'); ?></label></th>
<td>
        <textarea name="Cat_meta[extra3]" id="Cat_meta[extra3]" style="width:60%;"><?php echo $cat_meta['extra3'] ? $cat_meta['extra3'] : ''; ?></textarea><br />
        <span class="description"><?php _e('extra field'); ?></span>
    </td>
</tr>
<?php
}

Như bạn có thể thấy tôi đã thêm 4 trường mới và tất cả chúng đều nằm trong một mảng Cat_meta [key] bởi vì cách đó chúng tôi chỉ tạo trên hàng trong bảng tùy chọn để lưu tất cả các trường bổ sung của danh mục thay vì một hàng cho mỗi trường.

Tiếp theo, chúng ta cần lưu các trường bổ sung vào cơ sở dữ liệu sau khi người dùng gửi biểu mẫu chỉnh sửa danh mục và chúng tôi thực hiện điều đó bằng cách sử dụng "edit_carget" với một hàm sẽ chạy qua từng trường được gửi và chèn chúng vào cơ sở dữ liệu bằng hàm update_option , như thế này:

<?php
// save extra category extra fields hook
add_action ( 'edited_category', 'save_extra_category_fileds');

// save extra category extra fields callback function
function save_extra_category_fileds( $term_id ) {
    if ( isset( $_POST['Cat_meta'] ) ) {
        $t_id = $term_id;
        $cat_meta = get_option( "category_$t_id");
        $cat_keys = array_keys($_POST['Cat_meta']);
            foreach ($cat_keys as $key){
            if (isset($_POST['Cat_meta'][$key])){
                $cat_meta[$key] = $_POST['Cat_meta'][$key];
            }
        }
        //save the option array
        update_option( "category_$t_id", $cat_meta );
    }
}

Từ mã ở trên, bạn có thể thấy rằng tất cả các trường bổ sung mà chúng tôi đã thêm được lưu trữ trong bảng tùy chọn của cơ sở dữ liệu với tên 'category_ID', trong đó ID là id của danh mục cụ thể mà chúng tôi vừa chỉnh sửa và điều đó có nghĩa là chúng tôi có thể gọi đây là dữ liệu trong các plugin hoặc tệp chủ đề của chúng tôi dễ dàng sử dụng hàm get_option.

nói ví dụ id danh mục của tôi là 25 thì mã của tôi sẽ như thế nào

<?php $cat_data = get_option('category_25'); ?>

Như tôi đã nói ở phần đầu, tôi cần hiển thị một hình ảnh khác nhau cho mỗi danh mục, vì vậy trong trường hợp đó tôi đã thêm một vài dòng mã này vào chủ đề của tôi.

<?php
//first get the current category ID
$cat_id = get_query_var('cat');

//then i get the data from the database
$cat_data = get_option("category_$cat_id");

//and then i just display my category image if it exists
if (isset($cat_data['img'])){
    echo '<div class="category_image"><img src="'.$cat_data['img'].'"></div>';
}

Đẹp và dễ dàng và tất cả chúng ta đã hoàn thành. Kết quả sẽ trông giống như thế này:

nhập mô tả hình ảnh ở đây


4
Xin vui lòng gửi nội dung chính của blog của bạn vào câu trả lời này. Liên kết thối có thể xảy ra, ngay cả trên blog của riêng bạn.
Django Reinhardt

1
Điều này đã được trả lời vào năm 2011 bạn thân :)
Bai Internet

1
Điểm của bạn đang được?
Django Reinhardt

4
Nếu bạn không nghĩ câu trả lời này có bất kỳ giá trị nào, thì nó sẽ bị xóa ... Tuy nhiên câu hỏi này có hơn 16.000 lượt xem. Tôi nghĩ rằng câu hỏi vẫn hữu ích cho mọi người, mặc dù tuổi của nó, và câu trả lời này sẽ được cải thiện bằng cách bao gồm các chi tiết từ liên kết trong câu hỏi.
Django Reinhardt

4
... Trong khi các bạn đang bận rộn tranh luận về nó (một năm trước mặc dù), tôi chỉ mất chưa đầy 5 phút để đưa mọi thứ vào câu trả lời. Thật dễ dàng ...
MxmastaMills

18

Kể từ Wordpress 4.4, các hàm add_term_meta () , update_term_meta ()get_term_meta () đã được thêm vào. Điều này có nghĩa là mã được cung cấp bởi MxmastaMills có thể được cập nhật để sử dụng một cách tiếp cận ít hack hơn.

Đây là bản cập nhật của tôi về nó. Chỉ có một trường như tôi muốn thêm tiêu đề tùy chỉnh, nhưng nó sẽ hoạt động giống nhau cho tất cả các trường bạn muốn thêm.

function addTitleFieldToCat(){
    $cat_title = get_term_meta($_POST['tag_ID'], '_pagetitle', true);
    ?> 
    <tr class="form-field">
        <th scope="row" valign="top"><label for="cat_page_title"><?php _e('Category Page Title'); ?></label></th>
        <td>
        <input type="text" name="cat_title" id="cat_title" value="<?php echo $cat_title ?>"><br />
            <span class="description"><?php _e('Title for the Category '); ?></span>
        </td>
    </tr>
    <?php

}
add_action ( 'edit_category_form_fields', 'addTitleFieldToCat');

function saveCategoryFields() {
    if ( isset( $_POST['cat_title'] ) ) {
        update_term_meta($_POST['tag_ID'], '_pagetitle', $_POST['cat_title']);
    }
}
add_action ( 'edited_category', 'saveCategoryFields');

2
Vài điều cần lưu ý: trong edited_categoryhook, tag_IDsẽ nằm trong $_POSTmảng chứ không phải trong mảng $_GET. Cũng add_term_metasẽ thực sự thêm một mục mới thay vì ghi đè một mục cũ có thể. Sử dụng update_term_metathay thế.
Martin Dimitrov

@MartinDimitrov Bạn có thể sửa câu trả lời của luke-simmons bằng cách nhấp vào nút chỉnh sửa không? Bằng cách này, mọi người đều có thể sử dụng mã tốt nhất hiện có, ngay cả những người không viết mã tốt (nhà thiết kế ở đây!). Cảm ơn bạn!
Hugo

1
Nó không lưu dữ liệu trong biểu mẫu
Dev

@Dev nó không lưu dữ liệu, nó chỉ không hiển thị trừ khi bạn thay đổi $ _POST thành $ _GET trong dòng thứ hai.
banesto

3

Mã này hoạt động:

add_action ( 'edit_category_form_fields', function( $tag ){
    $cat_title = get_term_meta( $tag->term_id, '_pagetitle', true ); ?>
    <tr class='form-field'>
        <th scope='row'><label for='cat_page_title'><?php _e('Category Page Title'); ?></label></th>
        <td>
            <input type='text' name='cat_title' id='cat_title' value='<?php echo $cat_title ?>'>
            <p class='description'><?php _e('Title for the Category '); ?></p>
        </td>
    </tr> <?php
});
add_action ( 'edited_category', function() {
    if ( isset( $_POST['cat_title'] ) )
        update_term_meta( $_POST['tag_ID'], '_pagetitle', $_POST['cat_title'] );
});

Điều này ít vụng về hơn so với cái khác và tôi chỉ xác minh nó với WordPress 5.2.2
nico gawenda

1

Paul Menard đã cung cấp một ví dụ về cách tạo và sử dụng meta hạn trong blog của mình ...
meta tùy chỉnh cho các nguyên tắc phân loại mới trong WordPress 3.0 .

Không có ví dụ nào về việc tạo bảng DB hoặc kiểm tra các $_POSTvars được thiết lập, vì vậy bạn sẽ cần phải tự mình làm những việc nhỏ đó, nhưng có vẻ như là một cơ sở mã tốt để xây dựng trên đầu trang ... :)

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.