Добавьте раскрывающийся список фильтров для определенного атрибута продукта в списке продуктов администратора woocommerce. - PullRequest
0 голосов
/ 05 февраля 2019

В Woocommerce, в списке продуктов администратора, мне нужно отфильтровать продукты по определенному атрибуту.

На основе " Добавить раскрывающийся список фильтров для тегов продуктов в списке продуктов администратора woocommerce " код ответа. Я внес некоторые изменения в фильтрацию продуктов для pa_proizvoditel атрибут продукта :

add_action('restrict_manage_posts', 'product_attr_sorting');
function product_attr_sorting() {
    global $typenow;
    $taxonomy  = 'pa_proizvoditel';
    if ( $typenow == 'product' ) {
        $selected      = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : '';
        $info_taxonomy = get_taxonomy($taxonomy);
        wp_dropdown_categories(array(
            'show_option_all' => __("Attr {$info_taxonomy->label}"),
            'taxonomy'        => $taxonomy,
            'name'            => $taxonomy,
            'orderby'         => 'name',
            'selected'        => $selected,
            'show_count'      => true,
            'hide_empty'      => true,
        ));
    };
}

add_filter('parse_query', 'product_attr_sorting_query');
function product_attr_sorting_query($query) {
    global $pagenow;
    $taxonomy  = 'pa_proizvoditel';
    $q_vars    = &$query->query_vars;
    if ( $pagenow == 'edit.php' && isset($q_vars['post_type']) && $q_vars['post_type'] == 'product' && isset($q_vars[$taxonomy]) && is_numeric($q_vars[$taxonomy]) && $q_vars[$taxonomy] != 0 ) {
        $term = get_term_by('id', $q_vars[$taxonomy], $taxonomy);
        $q_vars[$taxonomy] = $term->slug;
    }
}

Но когда вы выбираете значение и нажимаете кнопку «фильтр», страница обновляется, но продукты не фильтруются (полный список всех продуктов).

Любая помощь в решении этой проблемы приветствуется.

Спасибо за помощь.Понял, что работает над версией выше 3 (проверено на 3.5+) Я не знаю, в чем дело, но у меня есть

function filter_proizvoditel_admin_sort( &$query )
{
if ( 
is_admin() 
AND 'edit.php' === $GLOBALS['pagenow']
AND isset( $_GET['pa_proizvoditel'] )
AND '-1' != $_GET['pa_proizvoditel']
)
{
$query->query_vars['tax_query'] = array( array(
     'taxonomy' => 'pa_proizvoditel'
    ,'field'    => 'ID'
    ,'terms'    => array( $_GET['pa_proizvoditel'] )
) );
}
}
add_filter( 'parse_query', 'filter_proizvoditel_admin_sort' );

function filter_proizvoditel_form()
{
$selected      = isset($_GET['pa_proizvoditel']) ? $_GET['pa_proizvoditel'] : '';
wp_dropdown_categories( array(
 'taxonomy'         => 'pa_proizvoditel',
'hide_empty'       => 0,
'name'             => 'pa_proizvoditel',
'show_option_none' => 'Все производители',
    'show_count'      => false,
    'hide_empty'      => true,
    'selected'        => $selected
) );
}
add_action( 'restrict_manage_posts', 'filter_proizvoditel_form', 25 );

1 Ответ

0 голосов
/ 05 февраля 2019

Я проверил ваш код версии, и он работает для любого определенного атрибута продукта таксономии.Теперь есть некоторые незначительные ошибки, такие как parse_query ловушка, которая является ловушкой действия (но не ловушкой фильтра) .

Например, я использую таксономию атрибута продукта pa_color в повторном рассмотрениикод ниже:

add_action('restrict_manage_posts', 'product_attribute_sorting_dropdown');
function product_attribute_sorting_dropdown() {
    global $typenow;
    $taxonomy  = 'pa_color';
    if ( $typenow == 'product' ) {
        $selected      = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : '';
        $info_taxonomy = get_taxonomy($taxonomy);
        wp_dropdown_categories(array(
            'show_option_all' => __("Attribute {$info_taxonomy->label}"),
            'taxonomy'        => $taxonomy,
            'name'            => $taxonomy,
            'orderby'         => 'name',
            'selected'        => $selected,
            'show_count'      => true,
            'hide_empty'      => true,
        ));
    };
}

add_action('parse_query', 'product_attribute_sorting_query');
function product_attribute_sorting_query( $query ) {
    global $pagenow;
    $taxonomy  = 'pa_color';
    $q_vars    = &$query->query_vars;
    if ( $pagenow == 'edit.php' && isset($q_vars['post_type']) && $q_vars['post_type'] == 'product' && isset($q_vars[$taxonomy]) && is_numeric($q_vars[$taxonomy]) && $q_vars[$taxonomy] != 0 ) {
        $term = get_term_by('id', $q_vars[$taxonomy], $taxonomy);
        $q_vars[$taxonomy] = $term->slug;
    }
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы).Протестировано и работает на Woocommerce версии 3+ (точно) .

Я получаю следующее раскрывающееся Атрибут продукта:

enter image description here

Затем, когда я фильтрую с помощью термина blue (5), я получаю правильное количество отфильтрованных продуктов:

enter image description here

Related: Добавить раскрывающийся список фильтров для тегов продуктов в списке продуктов администратора woocommerce

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