Forum Replies Created

Viewing 4 replies - 1 through 4 (of 4 total)
  • Thread Starter mathijsnl

    (@mathijsnl)

    Hello Zubair Zahid,

    Yes ofcourse. My approach was wrong as it was pointed out on a different forum. I was using a form but this will send the right url according to the code but not the url that will be automatically rewritten by woocommerce. So it was suggested to not use the form and that made me realize maybe i can use the filter option for woocommerce and send it to the category archive page. The result you can see on the website mentioned in the above message.

    function woocommerce_filter_shortcode() {
        ob_start();
        ?>
        <style>
            .woocommerce-filter-container {
                display: flex;
                flex-wrap: wrap;
                margin-bottom: 0px;
            }
            .woocommerce-filter-select {
                flex: 1;
                margin-right: 10px;
    			border-radius: 5px;
    			border: 2px solid #ddd;
            }
            .woocommerce-filter-button {
                background-color: #4CAF50;
                color: white;
                padding: 10px 20px;
                border: none;
                border-radius: 5px;
                cursor: pointer;
            }
        </style>
    
        <script type="text/javascript">
            jQuery(function($) {
                $('#filter-button').click(function() {
                    var mainCategory = $('#main-category').val();
                    var subCategory = $('#sub-category').val();
                    var subSubCategory = $('#sub-subcategory').val();
                    var url = '<?php echo get_site_url() . '?product_cat='; ?>' + mainCategory;
                    if (subCategory) {
                        url += '&product_cat=' + subCategory;
                    }
                    if (subSubCategory) {
                        url += '&product_cat=' + subSubCategory;
                    }
                    window.location.href = url;
                });
    
                $('#main-category').change(function() {
                    var mainCategory = $(this).val();
                    if (mainCategory) {
                        $.ajax({
                            url: '<?php echo admin_url('admin-ajax.php'); ?>',
                            type: 'POST',
                            data: { action: 'get_subcategories', mainCategory: mainCategory },
                            success: function(data) {
                                $('#sub-category').html(data);
                                $('#sub-subcategory').html('<option value="">Kies Bestemming</option>');
                            }
                        });
                    } else {
                        $('#sub-category, #sub-subcategory').html('<option value="">Kies Skigebied</option>');
                    }
                });
    
                $('#sub-category').change(function() {
                    var subCategory = $(this).val();
                    if (subCategory) {
                        $.ajax({
                            url: '<?php echo admin_url('admin-ajax.php'); ?>',
                            type: 'POST',
                            data: { action: 'get_subsubcategories', subCategory: subCategory },
                            success: function(data) {
                                $('#sub-subcategory').html(data);
                            }
                        });
                    } else {
                        $('#sub-subcategory').html('<option value="">Kies Bestemming</option>');
                    }
                });
            });
        </script>
    
        <div class="woocommerce-filter-container">
            <select id="main-category" class="woocommerce-filter-select">
                <option value="">Kies Land</option>
                <?php
                $args = array(
                    'taxonomy' => 'product_cat',
                    'orderby' => 'name',
                    'parent' => 0
                );
                $categories = get_categories($args);
                foreach ($categories as $category) {
                    echo '<option value="' . $category->slug . '">' . $category->name . '</option>';
                }
                ?>
            </select>
    
            <select id="sub-category" class="woocommerce-filter-select">
                <option value="">Kies Skigebied</option>
            </select>
    
            <select id="sub-subcategory" class="woocommerce-filter-select">
                <option value="">Kies Bestemming</option>
            </select>
    
            <button id="filter-button" class="woocommerce-filter-button">Zoek</button>
        </div>
        <?php
        return ob_get_clean();
    }
    add_shortcode('custom_search_bar', 'woocommerce_filter_shortcode');
    
    function get_subcategories() {
        $mainCategory = $_POST['mainCategory'];
        $args = array(
            'taxonomy' => 'product_cat',
            'orderby' => 'name',
            'parent' => get_term_by('slug', $mainCategory, 'product_cat')->term_id
        );
        $subcategories = get_categories($args);
        $options = '<option value="">Kies Skigebied</option>';
        foreach ($subcategories as $subcategory) {
            $options .= '<option value="' . $subcategory->slug . '">' . $subcategory->name . '</option>';
        }
        echo $options;
        die();
    }
    add_action('wp_ajax_get_subcategories', 'get_subcategories');
    add_action('wp_ajax_nopriv_get_subcategories', 'get_subcategories');
    
    function get_subsubcategories() {
        $subCategory = $_POST['subCategory'];
        $args = array(
            'taxonomy' => 'product_cat',
            'orderby' => 'name',
            'parent' => get_term_by('slug', $subCategory, 'product_cat')->term_id
        );
        $subsubcategories = get_categories($args);
        $options = '<option value="">Kies Bestemming</option>';
        foreach ($subsubcategories as $subsubcategory) {
            $options .= '<option value="' . $subsubcategory->slug . '">' . $subsubcategory->name . '</option>';
        }
        echo $options;
        die();
    }
    add_action('wp_ajax_get_subsubcategories', 'get_subsubcategories');
    add_action('wp_ajax_nopriv_get_subsubcategories', 'get_subsubcategories');
    
    Thread Starter mathijsnl

    (@mathijsnl)

    I based it on a woocommerce filter and it works fine now.

    SOLVED

    Thread Starter mathijsnl

    (@mathijsnl)

    Ok thank you, i will give it a try there!

    Thread Starter mathijsnl

    (@mathijsnl)

    Tank you Threadi,

    You mean by for example a rewrite_rule like this or maybe i dont get? Im sry im not a experienced coder.

    function custom_rewrite_rule() {
        add_rewrite_rule('^product-category/([^/]+)/([^/]+)/([^/]+)/?', 'index.php?product_cat=$matches[1]&product_subcat=$matches[2]&product_subsubcat=$matches[3]', 'top');
    }
    add_action('init', 'custom_rewrite_rule', 10, 0);
Viewing 4 replies - 1 through 4 (of 4 total)