/ Плагины / Изменяем админку Woocommerce

Изменяем админку Woocommerce

HIT

18.01.2018

6138

3

В данной статье собираются сниппеты меняющие функционал или внешний вид админ части Woocommerce.

Вернуть выпадающий список категорий

С версии WC 3.2 изменился фильтр постов в админке, конкретно выбор категории. Теперь сделали в виде Ajax строки поиска. Это не всегда удобно. Вернем предыдущую версию в виде выпадающего дерева категорий:

//Возвращаем в админку выпадающий список категорий
add_action( 'restrict_manage_posts', 'wcacd_category_dropdown', 15 );
function wcacd_category_dropdown() {
	// show the old dropdown category filter from WC 3.1.2
	wc_product_dropdown_categories( array( 'option_select_text' => __( 'Filter by category', 'woocommerce' ) ) );
	
	// hide the WC 3.2+ ajax category filter
	print '<style>.post-type-product .tablenav div .select2 {display:none;}</style>';
}

Переключатель уровня вложенности категорий

Решение взято с сайта wp-kama.

// Переключатель уровня категорий в админке
$taxonomy = 'product_cat';
add_action( "{$taxonomy}_add_form", function($taxonomy){
	ob_start();
} );

add_action( "after-{$taxonomy}-table", function($taxonomy){
	$html = ob_get_clean();

	$__preg_replace_callback = function( $match ){
		$val = @ $_GET['parent_only'];
		ob_start();
		?>
		<div class="alignleft actions">
			<select name="parent_only" onchange="window.add_param_to_URL(this)">
				<option value="">Все уровни...</option>
				<option value="yes" <?php selected('yes', $val) ?> >Только родители</option>
			</select>
		</div>
		<script>
		window.add_param_to_URL = function(el){
			var href = window.location.href, sep = /[?]/.test(href) ? "&" : "?", name = el.name.replace(/[^a-z_-]/i,'');
			window.location = (new RegExp(name+'=?')).test(href) ? href.replace( (new RegExp('([?&]'+name+'=?)[^&]*')), (el.value ? "$1"+ el.value : '') ) : (href + sep + name + "="+ el.value);
		}
		</script>
		<?php
		return $match[1] . ob_get_clean();
	};

	echo preg_replace_callback('~(id="doaction[^<]+</div>)~', $__preg_replace_callback, $html );
} );


add_filter('get_terms_args', 'my_terms_filter_handler');
function my_terms_filter_handler( $query ){
	if( empty($_GET['parent_only']) || ! is_admin() ) return $query;
	if( ! ( $query['fields'] == 'count' || isset($query['page'])  ) )
		 return $query;
	$query['parent'] = 0; // только родители
	return $query;
}

Сортировка по колонке Статус наличия

// Сортировка товаров по статусу наличия
add_filter( 'manage_edit-product_sortable_columns', 'my_product_sorting_column' );
function my_product_sorting_column( $columns ) {
    $columns['is_in_stock'] = 'in_stock';

    return $columns;
}
add_action( 'pre_get_posts', 'my_product_sorting' );

function my_product_sorting( $query ) {

    if( ! is_admin() )
        return;

    $orderby = $query->get( 'orderby');

    if( 'in_stock' == $orderby ) {
        $query->set('meta_key','_stock_status');
        $query->set('orderby','meta_value');
    }
}

Сортировка в админке по умолчанию

Можно произвольно изменить порядок вывода товаров в админке. При этом выбор сортировки по умолчанию не влияет на вывод товаров в админке.

Сортировка по названию

function sp_41964737_custom_product_order( $query ){

    global $typenow;

    if( is_admin() && $query->is_main_query() && $typenow == 'product' ){

        /* Post Column: e.g. title */
        if($query->get('orderby') == ''){
            $query->set('orderby', 'title');
        }
        /* Post Order: ASC / DESC */
        if($query->get('order') == ''){
            $query->set('order', 'ASC');
        }

    }
}
add_action( 'parse_query', 'sp_41964737_custom_product_order' );

Сортировка по статусу наличия (сначала в наличии)

function sp_41964737_custom_product_order( $query ){

    global $typenow;

    if( is_admin() && $query->is_main_query() && $typenow == 'product' ){
		
        /* Post Column: e.g. title */
        if($query->get('meta_key') == ''){
            $query->set('meta_key', '_stock_status');
        }		

        /* Post Column: e.g. title */
        if($query->get('orderby') == ''){
            $query->set('orderby', 'meta_value');
        }
		
        /* Post Order: ASC / DESC */
        if($query->get('order') == ''){
            $query->set('order', 'ASC');
        }

    }
}
add_action( 'parse_query', 'sp_41964737_custom_product_order' );

Добавить фильтр по рекомендуемым (featured) товарам

function wpa104537_filter_products_by_featured_status() {

     global $typenow, $wp_query;

    if ($typenow=='product') :


        // Featured/ Not Featured
        $output .= "<select name='featured_status' id='dropdown_featured_status'>";
        $output .= '<option value="">'.__( 'Show All Featured Statuses', 'woocommerce' ).'</option>';

        $output .="<option value='featured' ";
        if ( isset( $_GET['featured_status'] ) ) $output .= selected('featured', $_GET['featured_status'], false);
        $output .=">".__( 'Featured', 'woocommerce' )."</option>";

        $output .="<option value='normal' ";
        if ( isset( $_GET['featured_status'] ) ) $output .= selected('normal', $_GET['featured_status'], false);
        $output .=">".__( 'Not Featured', 'woocommerce' )."</option>";

        $output .="</select>";

        echo $output;
    endif;
}
add_action('restrict_manage_posts', 'wpa104537_filter_products_by_featured_status');

function wpa104537_featured_products_admin_filter_query( $query ) {
    global $typenow;

    if ( $typenow == 'product' ) {

        // Subtypes
        if ( ! empty( $_GET['featured_status'] ) ) {
            if ( $_GET['featured_status'] == 'featured' ) {
                $query->query_vars['tax_query'][] = array(
                    'taxonomy' => 'product_visibility',
                    'field'    => 'slug',
                    'terms'    => 'featured',
                );
            } elseif ( $_GET['featured_status'] == 'normal' ) {
                $query->query_vars['tax_query'][] = array(
                    'taxonomy' => 'product_visibility',
                    'field'    => 'slug',
                    'terms'    => 'featured',
                    'operator' => 'NOT IN',
                );
            }
        }

    }

}
add_filter( 'parse_query', 'wpa104537_featured_products_admin_filter_query' );

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
Отработка брошенных корзин

Отработка брошенных корзин

По самым различным причинам посетитель сайта может бросить оформление заказа на последнем шаге. Возможно этому посетителю нужно напомнить об оставленной корзине и предложить некий бонус. Abandoned Cart Lite for WooCommerce Читать далее »

Отзывы к товарам

Отзывы к товарам

Рассмотрим различные аспекты такого функционала WC как отзывы к товарам. Изображения в отзывах Плагин YITH WooCommerce Advanced Reviews (6000) добавляет в комментарии поле изображение (можно добавлять несколько) и заголовок. Также Читать далее »

Хлебные крошки WC

Хлебные крошки WC

Хлебные крошки WC имеют свои особенности. Их невозможно заменить стандартными хлебными крошками, т.к. в них еще не предусмотрена система для иерархических таксономий. Выводим хлебные крошки Первым делом надо назначить хлебные Читать далее »

Добавить комментарий

3 комментария

  1. Вячеслав

    Здравствуйте.
    Подскажите как сделать в админке вукомерца поиск по артикулу.

    1. Alexandr

      Попробуйте, как вариант, плагин Search by SKU for Woocommerce. Он расширяет поиск товаров по артикулу. Не могу только точно сказать работает ли в админке.

  2. Alex

    У меня предложенная функция сортировки в админке по умолчанию не сработала.

Изменяем админку Woocommerce
Пользовательские типы записей в основном цикле
Рекомендации для васПользовательские типы записей в основном циклеOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.