【问题标题】:Adding custom field to product category将自定义字段添加到产品类别
【发布时间】:2014-06-21 14:23:17
【问题描述】:

如何将自定义字段添加到产品类别?我已将自定义字段添加到产品,但我找不到任何扩展程序可以将自定义字段添加到产品类别。

【问题讨论】:

    标签: php wordpress woocommerce custom-fields hook-woocommerce


    【解决方案1】:

    您可以使用以下操作将自定义字段添加到 WooCommerce 产品类别:

    • product_cat_add_form_fields
    • product_cat_edit_form_fields
    • edited_product_cat
    • create_product_cat

    更新于 2017 年 2 月 17 日 ###适用于 WP 版本4.4 及更高版本。
    从 WordPress 4.4 开始,添加了 update_term_meta()get_term_meta() 函数。这意味着现在我们不必再将数据保存在wp_options 表中,而是将它们存储在wp_termmeta 表中。

    这是我更新的代码。

    //Product Cat Create page
    function wh_taxonomy_add_new_meta_field() {
        ?>
            
        <div class="form-field">
            <label for="wh_meta_title"><?php _e('Meta Title', 'wh'); ?></label>
            <input type="text" name="wh_meta_title" id="wh_meta_title">
            <p class="description"><?php _e('Enter a meta title, <= 60 character', 'wh'); ?></p>
        </div>
        <div class="form-field">
            <label for="wh_meta_desc"><?php _e('Meta Description', 'wh'); ?></label>
            <textarea name="wh_meta_desc" id="wh_meta_desc"></textarea>
            <p class="description"><?php _e('Enter a meta description, <= 160 character', 'wh'); ?></p>
        </div>
        <?php
    }
    
    //Product Cat Edit page
    function wh_taxonomy_edit_meta_field($term) {
    
        //getting term ID
        $term_id = $term->term_id;
    
        // retrieve the existing value(s) for this meta field.
        $wh_meta_title = get_term_meta($term_id, 'wh_meta_title', true);
        $wh_meta_desc = get_term_meta($term_id, 'wh_meta_desc', true);
        ?>
        <tr class="form-field">
            <th scope="row" valign="top"><label for="wh_meta_title"><?php _e('Meta Title', 'wh'); ?></label></th>
            <td>
                <input type="text" name="wh_meta_title" id="wh_meta_title" value="<?php echo esc_attr($wh_meta_title) ? esc_attr($wh_meta_title) : ''; ?>">
                <p class="description"><?php _e('Enter a meta title, <= 60 character', 'wh'); ?></p>
            </td>
        </tr>
        <tr class="form-field">
            <th scope="row" valign="top"><label for="wh_meta_desc"><?php _e('Meta Description', 'wh'); ?></label></th>
            <td>
                <textarea name="wh_meta_desc" id="wh_meta_desc"><?php echo esc_attr($wh_meta_desc) ? esc_attr($wh_meta_desc) : ''; ?></textarea>
                <p class="description"><?php _e('Enter a meta description', 'wh'); ?></p>
            </td>
        </tr>
        <?php
    }
    
    add_action('product_cat_add_form_fields', 'wh_taxonomy_add_new_meta_field', 10, 1);
    add_action('product_cat_edit_form_fields', 'wh_taxonomy_edit_meta_field', 10, 1);
    
    // Save extra taxonomy fields callback function.
    function wh_save_taxonomy_custom_meta($term_id) {
    
        $wh_meta_title = filter_input(INPUT_POST, 'wh_meta_title');
        $wh_meta_desc = filter_input(INPUT_POST, 'wh_meta_desc');
    
        update_term_meta($term_id, 'wh_meta_title', $wh_meta_title);
        update_term_meta($term_id, 'wh_meta_desc', $wh_meta_desc);
    }
    
    add_action('edited_product_cat', 'wh_save_taxonomy_custom_meta', 10, 1);
    add_action('create_product_cat', 'wh_save_taxonomy_custom_meta', 10, 1);
    

    USAGE,检索数据:

    echo $productCatMetaTitle = get_term_meta($term_id, 'wh_meta_title', true);
    echo $productCatMetaDesc = get_term_meta($term_id, 'wh_meta_desc', true);
    

    ###For WP 版本低于`4.4`。

    这里是代码

    //Product Cat creation page
    function text_domain_taxonomy_add_new_meta_field() {
        ?>
        <div class="form-field">
            <label for="term_meta[wh_meta_title]"><?php _e('Meta Title', 'text_domain'); ?></label>
            <input type="text" name="term_meta[wh_meta_title]" id="term_meta[wh_meta_title]">
            <p class="description"><?php _e('Enter a meta title, <= 60 character', 'text_domain'); ?></p>
        </div>
        <div class="form-field">
            <label for="term_meta[wh_meta_desc]"><?php _e('Meta Description', 'text_domain'); ?></label>
            <textarea name="term_meta[wh_meta_desc]" id="term_meta[wh_meta_desc]"></textarea>
            <p class="description"><?php _e('Enter a meta description, <= 160 character', 'text_domain'); ?></p>
        </div>
        <?php
    }
    
    add_action('product_cat_add_form_fields', 'text_domain_taxonomy_add_new_meta_field', 10, 2);
    
    //Product Cat Edit page
    function text_domain_taxonomy_edit_meta_field($term) {
    
        //getting term ID
        $term_id = $term->term_id;
    
        // retrieve the existing value(s) for this meta field. This returns an array
        $term_meta = get_option("taxonomy_" . $term_id);
        ?>
        <tr class="form-field">
            <th scope="row" valign="top"><label for="term_meta[wh_meta_title]"><?php _e('Meta Title', 'text_domain'); ?></label></th>
            <td>
                <input type="text" name="term_meta[wh_meta_title]" id="term_meta[wh_meta_title]" value="<?php echo esc_attr($term_meta['wh_meta_title']) ? esc_attr($term_meta['wh_meta_title']) : ''; ?>">
                <p class="description"><?php _e('Enter a meta title, <= 60 character', 'text_domain'); ?></p>
            </td>
        </tr>
        <tr class="form-field">
            <th scope="row" valign="top"><label for="term_meta[wh_meta_desc]"><?php _e('Meta Description', 'text_domain'); ?></label></th>
            <td>
                <textarea name="term_meta[wh_meta_desc]" id="term_meta[wh_meta_desc]"><?php echo esc_attr($term_meta['wh_meta_desc']) ? esc_attr($term_meta['wh_meta_title']) : ''; ?></textarea>
                <p class="description"><?php _e('Enter a meta description', 'text_domain'); ?></p>
            </td>
        </tr>
        <?php
    }
    
    add_action('product_cat_edit_form_fields', 'text_domain_taxonomy_edit_meta_field', 10, 2);
    
    // Save extra taxonomy fields callback function.
    function save_taxonomy_custom_meta($term_id) {
        if (isset($_POST['term_meta'])) {
            $term_meta = get_option("taxonomy_" . $term_id);
            $cat_keys = array_keys($_POST['term_meta']);
            foreach ($cat_keys as $key) {
                if (isset($_POST['term_meta'][$key])) {
                    $term_meta[$key] = $_POST['term_meta'][$key];
                }
            }
            // Save the option array.
            update_option("taxonomy_" . $term_id, $term_meta);
        }
    }
    
    add_action('edited_product_cat', 'save_taxonomy_custom_meta', 10, 2);
    add_action('create_product_cat', 'save_taxonomy_custom_meta', 10, 2);
    

    USAGE,检索数据:

    $metaArray = get_option('taxonomy_' . $term_id);
    echo $productCatMetaTitle = $metaArray['wh_meta_title'];
    echo $productCatMetaDesc = $metaArray['wh_meta_desc'];
        
    

    此代码位于您的活动子主题(或主题)的 function.php 文件中或任何插件文件中。

    所有代码都经过测试,功能齐全。


    参考

    官方文档:

    【讨论】:

    • 感谢更新,没听说他们添加了 termmeta 表。
    • 在查看产品类别时如何让它显示为列/屏幕选项?
    • @Ray:好点,但它与这个问题没有直接关系,但你可以发布一个问题并将链接分享给我。同时,我会更新我的教程链接。
    【解决方案2】:

    启动 Wordpress 4.4,您应该考虑等待 Woocommerce 升级或开始手动输入新的 wp_termmeta 表。

    https://core.trac.wordpress.org/ticket/10142

    【讨论】:

      【解决方案3】:

      WP 4.4 及以上版本的代码存在问题。

      当您在类别列表管理页面上更改任何内容(例如 url slug 或名称)时,自定义字段值将更改为空字符串。

      我为编辑添加了保存功能,该功能不会在类别编辑管理页面上执行:

      // Save extra taxonomy fields callback function - create.
      function wh_save_taxonomy_custom_meta_create($term_id) {
      
      $wh_meta_title = filter_input(INPUT_POST, 'wh_meta_title');
      $wh_meta_desc = filter_input(INPUT_POST, 'wh_meta_desc');
      
      update_term_meta($term_id, 'wh_meta_title', $wh_meta_title);
      update_term_meta($term_id, 'wh_meta_desc', $wh_meta_desc);
      }
      
      // Save extra taxonomy fields callback function - edit.
      function wh_save_taxonomy_custom_meta($term_id) {
          $screen = get_current_screen();
          if ( $screen->id != 'edit-product_cat' )
                  return; // exit if incorrect screen id
      
      $wh_meta_title = filter_input(INPUT_POST, 'wh_meta_title');
      $wh_meta_desc = filter_input(INPUT_POST, 'wh_meta_desc');
      
      update_term_meta($term_id, 'wh_meta_title', $wh_meta_title);
      update_term_meta($term_id, 'wh_meta_desc', $wh_meta_desc);
      }
      
      add_action('edited_product_cat', 'wh_save_taxonomy_custom_meta', 10, 1);
      add_action('create_product_cat', 'wh_save_taxonomy_custom_meta_create', 10, 1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2016-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多