管理面板中的自定义分类图像选项

时间:2016-03-16 07:35:53

标签: wordpress custom-taxonomy

我创建了一个自定义分类,并希望为每个类别提供一个图像选项。

  function create_product_taxonomies()
  {
     // Add new taxonomy, make it hierarchical (like categories)
     $labels = array(
        'name' => _x('product_categories', 'taxonomy general name'),
        'singular_name' => _x('Product', 'taxonomy singular name'),
        'search_items' => __('Search Product Category'),
        'all_items' => __('All Product Categorie(s)'),
        'parent_item' => __('Parent Product Category'),
        'parent_item_colon' => __('Parent Product Category:'),
        'edit_item' => __('Edit Product Category'),
        'update_item' => __('Update Product Category'),
        'add_new_item' => __('Add New'),
        'new_item_name' => __('New Product Name'),
        'menu_name' => __('Product Categories'),

        );

   $args = array(
       'hierarchical' => true,
       'labels' => $labels,
       'show_ui' => true,
       'show_admin_column' => true,
       'query_var' => true,
       'rewrite' => array('slug' => 'product_categories', 'with_front' =>      true));

  register_taxonomy('product_categories', array('products'), $args);
  flush_rewrite_rules();
  }
  //hooks
  add_action('init', 'create_product_taxonomies', 0);

如何为用户提供上传每个类别图像的选项?

2 个答案:

答案 0 :(得分:2)

在WordPress v4.4.2之前很难但不可能为术语制作自定义元字段,但现在它非常容易和简单。

你想上传图片,所以我们创建一个js文件并在functions.php中编写一些代码。

但首先我们创建自定义上传元字段。

function.php或编写注册自定义分类代码并编写此代码的地方:

  

首先我们创建自定义元词字段

add_action('product_categories_add_form_fields', 'add_term_image', 10, 2);
function add_term_image($taxonomy){
    ?>
    <div class="form-field term-group">
        <label for="">Upload and Image</label>
        <input type="text" name="txt_upload_image" id="txt_upload_image" value="" style="width: 77%">
        <input type="button" id="upload_image_btn" class="button" value="Upload an Image" />
    </div>
    <?php
}

在add_action()_add_form_fields之前编写自定义分类法,就像我在上面写"product_categories"_add_form_fields

一样
  

然后我们保存元词值

<?php
add_action('created_product_categories', 'save_term_image', 10, 2);
function save_term_image($term_id, $tt_id) {
    if (isset($_POST['txt_upload_image']) && '' !== $_POST['txt_upload_image']){
        $group = '#' . sanitize_title($_POST['txt_upload_image']);
        add_term_meta($term_id, 'term_image', $group, true);
    }
}
?>

与上面相同,在add_action created_之后写下您的分类名称,如created_product_categories

  

现在我们为编辑创建元术语字段

add_action('product_categories_edit_form_fields', 'edit_image_upload', 10, 2);
function edit_image_upload($term, $taxonomy) {
    // get current group
    $txt_upload_image = get_term_meta($term->term_id, 'term_image', true);
?>
    <div class="form-field term-group">
        <label for="">Upload and Image</label>
        <input type="text" name="txt_upload_image" id="txt_upload_image" value="<?php echo $txt_upload_image ?>" style="width: 77%">
        <input type="button" id="upload_image_btn" class="button" value="Upload an Image" />
    </div>
<?php
}
  

现在保存已修改的值

add_action('edited_product_categories', 'update_image_upload', 10, 2);
function update_image_upload($term_id, $tt_id) {
    if (isset($_POST['txt_upload_image']) && '' !== $_POST['txt_upload_image']){
        $group = '#' . sanitize_title($_POST['txt_upload_image']);
        update_term_meta($term_id, 'term_image', $group);
    }
}
  

现在我们转向** JS 文件for WordPress Media Uploader **

媒体uploader.js

jQuery(document).ready(function($){

    // Instantiates the variable that holds the media library frame.
    var meta_image_frame;

    // Runs when the image button is clicked.
    $('#upload_image_btn').click(function(e){

        // Prevents the default action from occuring.
        e.preventDefault();

        // If the frame already exists, re-open it.
        if ( meta_image_frame ) {
            meta_image_frame.open();
            return;
        }

        // Sets up the media library frame
        meta_image_frame = wp.media.frames.meta_image_frame = wp.media({
            title: meta_image.title,
            button: { text:  meta_image.button },
            library: { type: 'image' }
        });

        // Runs when an image is selected.
        meta_image_frame.on('select', function(){

            // Grabs the attachment selection and creates a JSON representation of the model.
            var media_attachment = meta_image_frame.state().get('selection').first().toJSON();

            // Sends the attachment URL to our custom image input field.
            $('#txt_upload_image').val(media_attachment.url);
        });

        // Opens the media library frame.
        meta_image_frame.open();
    });

});
  

现在最后一步

转到functions.php

function image_uploader_enqueue() {
    global $typenow;
    if( ($typenow == 'products') ) {
        wp_enqueue_media();

        wp_register_script( 'meta-image', get_template_directory_uri() . '/js/media-uploader.js', array( 'jquery' ) );
        wp_localize_script( 'meta-image', 'meta_image',
            array(
                'title' => 'Upload an Image',
                'button' => 'Use this Image',
            )
        );
        wp_enqueue_script( 'meta-image' );
    }
}
add_action( 'admin_enqueue_scripts', 'image_uploader_enqueue' );

调用图像

  

调用图像

<?php
    $categories = get_terms('product_categories');

    foreach($categories as $term) {
        $upload_image = get_term_meta($term->term_id, 'term_image', true);
?>
        <img src="<?php echo $upload_image ?>">
<?php
    }
?>

我的工作代码,请仔细使用。

希望此代码能为您提供帮助。如果这段代码能够接受我的答案:)

答案 1 :(得分:0)

无法添加大量代码,但您可以获得它

  1. 使用ACF,高级自定义字段:wordpress.org/plugins/advanced-custom-fields /
  2. 以下是documentation

    的文档

    此外,对于相关的分类,github acf-taxonomy-field

    这是我主题的片段:

    register_field_group( array (
        'id'        => 'acf_taxonomy-authors',
        'title'     => 'Taxonomy Authors',
        'fields'    => array (
            array (
                'key'           => 'field_560746011af90',
                'label'         => 'Book Authors',
                'name'          => 'book_authors',
                'type'          => 'image',
                'instructions'  => 'Upload the book author image here',
                'save_format'   => 'url',
                'preview_size'  => 'thumbnail',
                'library'       => 'all',
            ),
        ),
        'location'  => array (
            array (
                array (
                    'param'     => 'ef_taxonomy',
                    'operator'  => '==',
                    'value'     => 'author',
                    'order_no'  => 0,
                    'group_no'  => 0,
                ),
            ),
        ),
        'options'               => array (
            'position'          => 'normal',
            'layout'            => 'default',
            'hide_on_screen'    => array (
            ),
        ),
        'menu_order'    => 0,
    ));
    

    和taxonoy注册:

    <?php 
    /**
     * @uses  Register Book Author Taxonomy
     * @uses  Adds query vars
     * @author Nirpendra Patel
     * @return void
     **/
    function reg_tax_author() {
    
        $authors = array(
            'name'                  => _x( 'Authors', 'Taxonomy plural name', 'b_thebookstore' ),
            'singular_name'         => _x( 'Author', 'Taxonomy singular name', 'b_thebookstore' ),
            'search_items'          => __( 'Search Authors', 'b_thebookstore' ),
            'popular_items'         => __( 'Popular Authors', 'b_thebookstore' ),
            'all_items'             => __( 'All Authors', 'b_thebookstore' ),
            'parent_item'           => __( 'Parent Author', 'b_thebookstore' ),
            'parent_item_colon'     => __( 'Parent Author:', 'b_thebookstore' ),
            'edit_item'             => __( 'Edit Author', 'b_thebookstore' ),
            'update_item'           => __( 'Update Author', 'b_thebookstore' ),
            'add_new_item'          => __( 'Add New Author', 'b_thebookstore' ),
            'new_item_name'         => __( 'New Author Name', 'b_thebookstore' ),
            'add_or_remove_items'   => __( 'Add or remove Authors', 'b_thebookstore' ),
            'choose_from_most_used' => __( 'Choose from most used Authors', 'b_thebookstore' ),
            'menu_name'             => __( 'Authors', 'b_thebookstore' ),
        );
    
        $args = array(
            'labels'            => $authors,
            'public'            => true,
            'show_in_nav_menus' => true,
            'show_admin_column' => true,
            'hierarchical'      => true,
            'show_tagcloud'     => true,
            'show_ui'           => true,
            'query_var'         => true,
            'rewrite'           => true,
            'query_var'         => true,
            'capabilities'      => array(),
        );
    
        register_taxonomy( 'author', array( 'product' ), $args );
    }
    ?>