Site logo

Archived topic

Woocommerce Category Custom Field & Dynamic Option

5 replies · Started by melvin on March 23, 2021

Viewing posts 1–6 of 6

Hi,

Objective: I would like to show dynamic option using element block module (for page hero) on woocommerce product category.
https://imgur.com/y5qIgo7

I've tried a few setting but it doesnt work. Can you please help me to see how to set properly?

Things i've done.

Step 1: Insert code to create custom field on woocommerce category page

//Product Cat creation page
function from_price_taxonomy_add_new_meta_field() {
    ?>
    <div class="form-field">
        <label for="term_meta[wh_meta_price]"><?php _e('Meta Price', 'from_price'); ?></label>
        <input type="text" name="term_meta[wh_meta_price]" id="term_meta[wh_meta_price]">
        <p class="description"><?php _e('Package with lowest price in this category', 'from_price'); ?></p>
    </div>
    <div class="form-field">
        <label for="term_meta[wh_meta_desc]"><?php _e('Meta Description', 'from_price'); ?></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', 'from_price'); ?></p>
    </div>
    <?php
}

add_action('product_cat_add_form_fields', 'from_price_taxonomy_add_new_meta_field', 10, 2);

//Product Cat Edit page
function from_price_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_price]"><?php _e('Meta Price', 'from_price'); ?></label></th>
        <td>
            <input type="text" name="term_meta[wh_meta_price]" id="term_meta[wh_meta_price]" value="<?php echo esc_attr($term_meta['wh_meta_price']) ? esc_attr($term_meta['wh_meta_price']) : ''; ?>">
            <p class="description"><?php _e('package with lowest price in this category', 'from_price'); ?></p>
        </td>
    </tr>
    <tr class="form-field">
        <th scope="row" valign="top"><label for="term_meta[wh_meta_desc]"><?php _e('Meta Description', 'from_price'); ?></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_price']) : ''; ?></textarea>
            <p class="description"><?php _e('Enter a meta description', 'from_price'); ?></p>
        </td>
    </tr>
    <?php
}

add_action('product_cat_edit_form_fields', 'from_price_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);

Step 2 : Set Dynamic Options
https://imgur.com/ahgTUa5

The meta price i set is not shown. Could you please check where have i set wrongly and guide me to show it correctly?

TQ

Melvin

Hi there,

first thing to check is whether the term_meta key is correct.
Create a temporary Hook Element and add this snippet replacing your_meta_key_name with the relevant meta key:

<?php 
echo 'test output - meta key value should be below';
echo get_term_meta( get_queried_object_id(), 'your_meta_key_name', true); 
?>

And hook this into the after_header

Does the value get displayed?

If it doesn't then it means the meta_key is not correct.

Hi David,

Thanks for your response. I've tested on this page but the value doesn't display.

This is the code i used

<?php 
echo 'test output - meta key value should be below';
echo get_term_meta( get_queried_object_id(), 'wh_meta_price', true); 
?>

This is the custom field code is used

//Product Cat creation page
function from_price_taxonomy_add_new_meta_field() {
    ?>
    <div class="form-field">
        <label for="term_meta[wh_meta_price]"><?php _e('Meta Price', 'from_price'); ?></label>
        <input type="text" name="term_meta[wh_meta_price]" id="term_meta[wh_meta_price]">
        <p class="description"><?php _e('Package with lowest price in this category', 'from_price'); ?></p>
    </div>
    <div class="form-field">
        <label for="term_meta[wh_meta_desc]"><?php _e('Meta Description', 'from_price'); ?></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', 'from_price'); ?></p>
    </div>
    <?php
}

add_action('product_cat_add_form_fields', 'from_price_taxonomy_add_new_meta_field', 10, 2);

//Product Cat Edit page
function from_price_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_price]"><?php _e('Meta Price', 'from_price'); ?></label></th>
        <td>
            <input type="text" name="term_meta[wh_meta_price]" id="term_meta[wh_meta_price]" value="<?php echo esc_attr($term_meta['wh_meta_price']) ? esc_attr($term_meta['wh_meta_price']) : ''; ?>">
            <p class="description"><?php _e('package with lowest price in this category', 'from_price'); ?></p>
        </td>
    </tr>
    <tr class="form-field">
        <th scope="row" valign="top"><label for="term_meta[wh_meta_desc]"><?php _e('Meta Description', 'from_price'); ?></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_price']) : ''; ?></textarea>
            <p class="description"><?php _e('Enter a meta description', 'from_price'); ?></p>
        </td>
    </tr>
    <?php
}

add_action('product_cat_edit_form_fields', 'from_price_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);

Could you kindly help me to check where's wrong with the code? or what maybe i used a wrong meta_key?

Please help.

Thanks

It could be that the key is wrong.

What happens if you do this?:

var_dump(get_term_meta( get_queried_object_id() ));

Do you see your key/value in the output?

Hi Tom,

Thanks for the advice. I've tested the code on the below page,

<?php 
echo 'test output - meta key value should be below';
echo var_dump(get_term_meta( get_queried_object_id() ));
?>

And i didnt see the key/value in the output. If you could kind enough to see what's wrong with my code that i inserted to create a custom field for woocommerce category below? I just added the below code to child theme function.php file

//Product Cat creation page
function from_price_taxonomy_add_new_meta_field() {
    ?>
    <div class="form-field">
        <label for="term_meta[wh_meta_price]"><?php _e('Meta Price', 'from_price'); ?></label>
        <input type="text" name="term_meta[wh_meta_price]" id="term_meta[wh_meta_price]">
        <p class="description"><?php _e('Package with lowest price in this category', 'from_price'); ?></p>
    </div>
    <div class="form-field">
        <label for="term_meta[wh_meta_desc]"><?php _e('Meta Description', 'from_price'); ?></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', 'from_price'); ?></p>
    </div>
    <?php
}

add_action('product_cat_add_form_fields', 'from_price_taxonomy_add_new_meta_field', 10, 2);

//Product Cat Edit page
function from_price_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_price]"><?php _e('Meta Price', 'from_price'); ?></label></th>
        <td>
            <input type="text" name="term_meta[wh_meta_price]" id="term_meta[wh_meta_price]" value="<?php echo esc_attr($term_meta['wh_meta_price']) ? esc_attr($term_meta['wh_meta_price']) : ''; ?>">
            <p class="description"><?php _e('package with lowest price in this category', 'from_price'); ?></p>
        </td>
    </tr>
    <tr class="form-field">
        <th scope="row" valign="top"><label for="term_meta[wh_meta_desc]"><?php _e('Meta Description', 'from_price'); ?></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_price']) : ''; ?></textarea>
            <p class="description"><?php _e('Enter a meta description', 'from_price'); ?></p>
        </td>
    </tr>
    <?php
}

add_action('product_cat_edit_form_fields', 'from_price_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);

Thanks TOM

This archived topic is closed to new replies.