Woocommerce multiselect больше не будет сохранять в категории - PullRequest
0 голосов
/ 02 апреля 2020

У меня проблема с сохранением фильтров, которые должны отображаться на странице категории.

У меня следующий код:

<?php

add_action('init', function () {
    register_meta('term', 'category_filters', 'sanitize_category_filters');
});

function sanitize_category_filters($category_filters)
{
    return wp_kses_post($category_filters);
}


function product_cat_add_category_filters_meta()
{
    wp_nonce_field(basename(__FILE__), 'product_cat_category_filters_nonce');
    $product_cat_category_filters = array();
    $attrs = wc_get_attribute_taxonomies(); ?>

    <div class="form-field">
        <label for="wpm-product-cat-category_filters">Filters</label>
        <?php if ($attrs) : ?>

            <select multiple="multiple" name="wpm-product-cat-category_filters[]" id="wpm-product-cat-category_filters"
                    style="min-width: 100%; min-height: 12rem;">
                <?php foreach ($attrs as $key => $value) : ?>
                    <option <?= $product_cat_category_filters && in_array($value->attribute_name, $product_cat_category_filters) ? 'selected' : ''; ?>
                            value="<?= $value->attribute_name ?>"><?= $value->attribute_label ?></option>
                <?php endforeach; ?>
            </select>

        <?php endif; ?>
        <p class="description">Choose filters for category</p>
    </div>
<?php }

add_action('product_cat_add_form_fields', 'product_cat_add_category_filters_meta');


// Add category_filters field to edit category page
function product_cat_edit_category_filters_meta($term)
{
    $product_cat_category_filters = array();
    $product_cat_category_filters = get_term_meta($term->term_id, 'category_filters', true);

    if (!$product_cat_category_filters) $product_cat_category_filters = '';
    $attrs = wc_get_attribute_taxonomies();
    $settings = array('textarea_name' => 'wpm-product-cat-category_filters'); ?>

    <tr class="form-field">
        <th scope="row" valign="top"><label for="wpm-product-cat-category_filters">Filters</label></th>
        <td>
            <?php wp_nonce_field(basename(__FILE__), 'product_cat_category_filters_nonce'); ?>
            <?php if ($attrs) : ?>

                <select multiple="multiple" name="wpm-product-cat-category_filters[]"
                        id="wpm-product-cat-category_filters" style="min-width: 100%; min-height: 12rem;">
                    <?php foreach ($attrs as $key => $value) : ?>
                        <option <?= $product_cat_category_filters && in_array($value->attribute_name, $product_cat_category_filters) ? 'selected' : ''; ?>
                                value="<?= $value->attribute_name ?>"><?= $value->attribute_label ?></option>
                    <?php endforeach; ?>
                </select>

            <?php endif; ?>
            <p class="description">Choose filters for category</p>
        </td>
    </tr>
<?php }

add_action('product_cat_edit_form_fields', 'product_cat_edit_category_filters_meta');


function product_cat_category_filters_meta_save($term_id)
{
    if (!isset($_POST['product_cat_category_filters_nonce']) || !wp_verify_nonce($_POST['product_cat_category_filters_nonce'], basename(__FILE__))) {
        return;
    }
    $old_category_filters = get_term_meta($term_id, 'category_filters', true);
    $new_category_filters = isset($_POST['wpm-product-cat-category_filters']) ? $_POST['wpm-product-cat-category_filters'] : '';
    if ($old_category_filters && '' === $new_category_filters) {
        delete_term_meta($term_id, 'category_filters');
    } else if ($old_category_filters !== $new_category_filters) {
        update_term_meta(
            $term_id,
            'category_filters',
            sanitize_details($new_category_filters)
        );
        return update_metadata('term', $term_id, 'category_filters', sanitize_details($new_category_filters));
    }
}

add_action('create_product_cat', 'product_cat_category_filters_meta_save');
add_action('edit_product_cat', 'product_cat_category_filters_meta_save');

У меня есть несколько фильтров в магазине woocommerce.

Для категории продукта я хочу выбрать, какие фильтры атрибутов я хочу показать. У меня есть код ниже для этого. Мультиселект отобразится на странице редактирования категории продукта, но когда я выберу один или несколько параметров, они не сохранятся в базе данных.

Что делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...