it-swarm-vi.tech

Metabox tùy chỉnh với thả xuống phân loại - Vấn đề tiết kiệm

Mục tiêu của tôi rất đơn giản --- để tạo ra một loại bài đăng tùy chỉnh với siêu dữ liệu tùy chỉnh với danh sách thả xuống đơn giản các thuật ngữ phân loại thay vì sử dụng các thẻ hoặc hộp kiểm. Lý do là để đảm bảo rằng biên tập viên chỉ có thể chọn một thuật ngữ duy nhất từ ​​danh sách phân loại.

Sau khi dùng thử và lỗi, cuối cùng tôi cũng tìm ra cách sử dụng các công cụ tạo metabox tuyệt vời mà tôi đang sử dụng từ WP-Alchemy (http://farinspace.com/wpalchemy-metabox/) để tạo ra metabox của mình và để nó hiển thị ứng dụng điều khoản trong một danh sách thả xuống.

Vấn đề tôi gặp phải là dường như tôi không thể có được lựa chọn mới từ menu thả xuống để lưu giá trị đã chọn.

Để rõ ràng ... điều quan trọng là chỉ một thuật ngữ duy nhất được liên kết với mỗi bài đăng trong loại bài đăng tùy chỉnh này có nghĩa là bất cứ khi nào một giá trị khác được chọn từ menu thả xuống và bài đăng được lưu, nó cần phải đảm bảo lựa chọn trước đó không được đăng ký.

Như đã đề cập, tôi hiện có nó hiển thị danh sách các thuật ngữ trong danh sách thả xuống và tôi cũng có nó hiển thị chính xác bất kỳ thuật ngữ nào có thể được liên kết.

Chỉ cần tiết kiệm các giá trị mới là nơi tôi đang gặp vấn đề.

Từ nghiên cứu sâu rộng, "có vẻ" giống như giải pháp liên quan đến việc sử dụng các hàm "wp_set_post_terms" của wordpress được giải thích thêm ở đây: http://codex.wordpress.org/Function_Reference/wp_set_post_terms Tuy nhiên tôi không chắc cách sử dụng chính xác để đạt được kết quả mong muốn của tôi.

Dưới đây tôi đã bao gồm mã tôi đang sử dụng. Rất có thể có một cách tốt hơn để làm điều này và tôi sẽ đánh giá cao bất kỳ đề xuất nào mà các bạn có thể có thể đảm bảo rằng "kiểm tra" hiện hành được thực hiện để đảm bảo dữ liệu không thể được chèn bởi người dùng không được phép.

CHỨC NĂNG.PHP FILE (HIỂN THỊ TẠO TÙY CHỈNH POST LOẠI VÀ THUẾ DƯỚI ĐÂY.

//////////////////////////////////////////////////////////////////////////////
// CUSTOM POSTTYPE FOR -- SERVICES  
//////////////////////////////////////////////////////////////////////////////

add_action('init', 'services');
function services() {
 register_post_type('services', array(
  'labels' => array(
   'name'   => __('Services'),
   'singular_label'  => __('Service'),
   'new_item'   => __('Add a Service'),
   'add_new'   => __('Add a Service'),
   'add_new_item'  => __('Add a Service'),
   'edit'   => __('Edit Service'),
   'edit_item'   => __('Edit Service'),
   'view'   => __('View Service'),
   'view_item'   => __('View Service'),
   'search_items'  => __('Search Services'),
   'not_found'   => __('No Services Found'),
   'not_found_in_trash' => __('No Services Found in Trash'),
       'parent_item'  => __('Parent Service'),
   'parent_item_colon' => __('Parent Service:')
   ),
  'can_export'    => true,
  'menu_position'   => 7,
  'public'    => false,
  'show_ui'    => true,
  'publicly_queryable'  => true,
  'hierarchical'   => true,
  'query_var'    => true,
  'capability_type'   => 'post',
  'exclude_from_search'  => false,
  'supports' => array(
   'title',
   'editor',
   'revisions',
   'page-attributes'
   ),
  'rewrite' => array( 
   'slug'   => 'disability-services', 
   'with_front'   => false
   )
 ));
}

TẠI ĐÂY IS TÔI ĐANG ĐĂNG KÝ THUẾ Ở ĐÂU TÔI ĐANG THỰC HIỆN LÀM VIỆC VỚI

// CUSTOM TAXONOMY METABOX POSTTYPE - AGE GROUPS
   register_taxonomy('theme', array('services'), array(
    'hierarchical'          => false, 
    'singular_label'            => 'Age Group', 
    'query_var'                 => 'theme',
    'public'                => true,
    'show_ui'               => true,
    'show_tagcloud'             => false,
    'show_in_nav_menus'             => true,    
    'rewrite'               => array( 'slug' => 'age-groups', 'with_front' => false ),
    'labels' => array(
        'name'          => __( 'Age Groups' ),
        'singular_name'         => __( 'Age Groups' ),
        'search_items'      => __( 'Search Age Groups' ),
        'all_items'             => __( 'All Age Groups' ),
        'parent_item'       => __( 'Parent Age Group' ),
        'parent_item_colon'         => __( 'Parent Age Group:' ),
        'edit_item'             => __( 'Edit Age Group' ), 
        'update_item'       => __( 'Update Age Group' ),
        'add_new_item'      => __( 'Add Age Group' ),
        'new_item_name'         => __( 'New Name of Age Group' ),
        'popular_items'         => __( 'Popular Age Groups' ),
        'separate_items_with_commas'=> __( 'Separate Age Groups with commas' ),
        'add_or_remove_items'   => __( 'Add or remove Age Groups' ),
        'choose_from_most_used' => __( 'Select Popular Age Groups' ), 
        ),
   ));
   wp_insert_term('Kids', 'theme');
   wp_insert_term('Teens', 'theme');
   wp_insert_term('Adults', 'theme');

NÀY IS NHỚ NHỚ MÃ SỐ TÔI ĐANG SỬ DỤNG TRONG CHỨC NĂNG FILE VÀ MÃ SỐ ĐỂ TẠO METABOX DỰA TRÊN WPALECHEMY. Trong nỗ lực này, tôi đã cố gắng bao gồm 'save_filter' => "wp_set_post_terms ($ post-> ID, 'theme')", với hy vọng điều này sẽ lưu dữ liệu áp dụng nhưng không được.

// CUSTOM METABOX POSTTYPE - SERVICE DETAILS
   $custom_metabox_service_details = new WPAlchemy_MetaBox(array (
    'id'        => '_service_details-metaboxes',        // underscore prefix hides fields from the custom fields area
    'title'     => 'Age Groups',            // title added automatically to the custom metabox
    'types'     => array('services'),           // added only for custom post type "name-of-post-type" can also be "page" or "post"
    'context'   => 'normal',                    // same as above, defaults to "normal" but can use "advanced" or "side"
    'priority'  => 'high',                  // same as above, defaults to "high" but can use "low" as well
    'mode'  => WPALCHEMY_MODE_EXTRACT,
    'save_filter' => "wp_set_post_terms( $post->ID, 'theme' )",
    'template'  => TEMPLATEPATH . '/admin-metabox/service_details-metaboxes.php'  // contents for the meta box
    ));

TÔI NÊN C NOTENG LƯU Ý R DING DIMAS TRÊN AT WPALECHMEY CHỈ CẦN MỘT SỐ MÃ MỚI VÀO 1.3.2 PHIÊN BẢN CỦA GITHUB MÀ CHO PHÉP MÃ SỐ TRÊN ĐỂ BAO GỒM

'save_filter' => "custom-function", 

Mã này cho phép bạn tạo một chức năng tùy chỉnh hoặc tôi đoán gọi một chức năng tùy chỉnh được thực thi khi nhấn nút xuất bản để có thể đó là cách tốt nhất để lưu dữ liệu?

Trong mọi trường hợp, tôi đang sử dụng mã sau đây cho metabox tùy chỉnh để hiển thị danh sách thả xuống thực tế hiển thị các điều khoản phân loại.

<?php 
// This function gets called in edit-form-advanced.php
echo '<input type="hidden" name="taxonomy_noncename" id="taxonomy_noncename" value="' . wp_create_nonce( 'taxonomy_theme' ) . '" />';

// Get all theme taxonomy terms
$themes = get_terms('theme', 'hide_empty=0'); 
?>

<select name='post_theme' id='post_theme'>
// DISPLAY TERMS AS DROP DOWN OPTIONS
<?php $names = wp_get_object_terms($post->ID, 'theme'); ?>
<option class='theme-option' value='' <?php if (!count($names)) echo "selected";?>>None</option>
<?php foreach ($themes as $theme) {
 if (!is_wp_error($names) && !empty($names) && !strcmp($theme->slug, $names[0]->slug)) 
 echo "<option class='theme-option' value='" . $theme->slug . "' selected>" . $theme->name . "</option>\n"; 
 else
 echo "<option class='theme-option' value='" . $theme->slug . "'>" . $theme->name . "</option>\n"; 
}
?>
</select>

Tôi giả sử việc lưu dữ liệu nên đơn giản như chiếc bánh nhưng tôi đoán tôi đang bối rối về cách thực hiện việc này.

Như đã đề cập, tôi sẽ đánh giá cao nếu bạn cũng có thể cung cấp các đề xuất về mã để đảm bảo mọi kiểm tra cần thiết được thực hiện để đảm bảo dữ liệu được lưu chính xác và chỉ là người được ủy quyền chính xác.

Phải cảm ơn trước!

3
NetConstructor.com

Đối với bất cứ ai quan tâm, tôi đã trả lời câu hỏi này trên một bài đăng khác:

Tiết kiệm các điều khoản phân loại

1
NetConstructor.com