Необходимо дважды перезагрузить страницу при вызове woocommerce_product_query - PullRequest
0 голосов
/ 17 октября 2018

У меня есть эти 3 функции в моем functions.php (извините за код новичка).

Там есть кнопка отправки и выпадающий список.Пользователь выбирает страну в списке опций и нажимает отправить.Затем запускается custom_product_query_tax_query, который сортирует товары по слизнякам Дания или Европа.Это работает, однако мне нужно дважды нажать кнопку отправки или, по крайней мере, перезагрузить страницу вручную, чтобы изменения были видны.

Нужно ли вызывать woocommerce_product_query перед другим контентом, или я просто делаю это?все не так?

//Before shop loop we inject the dropdown form with submit button.
//We also preselect the last option choosen, based on the country in session.
function report_button()
{
    // display button only on posts
    if ( !is_single() )
    {
    $retrive_data = WC()->session->get( 'Country' );
        $denmark = '';
        $europe = '';
        if($retrive_data === 'Denmark')
        {
            $denmark = 'selected';
        }
        else
        {
            $europe = 'selected';
        }
    $content .= '<form action="" method="POST">
                    <select name="select_name[]" id="">
                        <option value="Europe" '. $europe .'>Vis alle produkter</option>
                        <option value="Denmark" '. $denmark .'>Vis kun lovlige i Danmark</option>
                    </select>
                <input type="submit">
                </form>';
    echo $content;
    }
}
add_action( 'woocommerce_before_shop_loop', 'report_button', 10 );

//On submit, we set the selected country in a session variable.
add_action( 'template_redirect', 'wpse149613_form_process' );
function wpse149613_form_process()
{
    if(isset($_POST['select_name'])){ // select_name will be replaced with your input filed name
        $getInput = $_POST['select_name']; // select_name will be replaced with your input filed name
        foreach ($getInput as $option => $value) {
            $selectedOption = $value;
            WC()->session->set( 'Country' , $selectedOption );
        }
    }
}

//Custom woocommerce product query, show only products with Slug, Denmark.
function custom_product_query_tax_query( $q )
{
    if( is_admin() ) return $q;

    $retrive_data = WC()->session->get( 'Country' );

    if ( $retrive_data == 'Denmark' )
    {        
        $tax_query = (array) $q->get( 'tax_query' );

        $tax_query[] = array(
               'taxonomy' => 'product_tag',
               'field' => 'slug',
               'terms' => array( 'Denmark' ),
               'operator' => 'IN'
        );
        $q->set( 'tax_query', $tax_query );
    }
    else
    {
        return $q;
    }
}
add_filter( 'woocommerce_product_query', 'custom_product_query_tax_query', 10, 2 );

1 Ответ

0 голосов
/ 17 октября 2018

Хорошо, похоже, я нашел ответ в другом месте.Хук функции template_redirect, нужно куда-то перенаправить.Я добавил это к нижней части кода, и он работает!

    $current_url = home_url( add_query_arg( array(), $wp->request ) );
    wp_redirect($current_url);
    exit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...