【问题标题】:custom taxonomy image option in admin panel管理面板中的自定义分类图像选项
【发布时间】:2016-03-16 07:35:52
【问题描述】:

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

  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);

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

【问题讨论】:

  • 你现在的 WordPress 版本是什么
  • 最新版本
  • 给我号码,例如 3.658.254
  • 好的...等待至少 30 分钟
  • 你需要挂钩product_categories_edit_form_fieldsproduct_categories_add_form_fields,并添加自定义上传图片字段并保存。 Look at this questionthis tutorial

标签: wordpress custom-taxonomy


【解决方案1】:

在 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_ 之后写下您的分类名称 Like 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 WordPress 媒体上传器文件**

媒体上传器.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
    }
?>

这是我的工作代码,请谨慎使用。

希望此代码对您有所帮助。如果此代码有效,请接受我的回答 :)

【讨论】:

    【解决方案2】:

    无法添加大量代码,但你可以得到它

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

    这是它的文档documentation

    此外,与分类相关,github acf-taxonomy-field

    这是我的主题中的一个 sn-p:

    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,
    ));
    

    和分类注册:

    <?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 );
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2014-02-16
      相关资源
      最近更新 更多