WooCommerce – фильтр по признакам в admin

У WooCommerce есть простой способ выбрать «Рекомендуемые» продукты, щелкнув значок маленькой звезды в столбце «Избранные» в области администратора.

Мне нужно иметь возможность фильтровать и показывать только избранные продукты в области администрирования. Кто-нибудь знает простой способ сделать это?

Я сделал некоторое копание, и получается, что это делается с помощью мета-ключа / значений, где _featured – это ключ, а значение – либо yes либо no .

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

Solutions Collecting From Web of "WooCommerce – фильтр по признакам в admin"

Вы можете отсортировать список своих продуктов по указанному статусу. Просто нажмите на звезду в верхней части столбца …. как только вы поместите все невооруженные элементы вверху, и дважды нужно отменить это и поместить все признанные элементы вверху.

Ваш URL-адрес администратора будет выглядеть так: /wp-admin/edit.php?post_type=product&orderby=featured&order=desc

Сортировать продукты по статусу

РЕДАКТИРОВАТЬ:

Хорошо, так что оказалось, что это не так сложно отфильтровать по признакам. WooCommerce фильтруется по «подтипу», и поскольку это также фильтрует мета, мы можем в основном просто скопировать их код и внести несколько корректировок.

Первая функция добавляет элемент select / drop-down, а второй обрабатывает настройки для запроса администратора.

 /** * Filter products by type * * @access public * @return void */ 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'); /** * Filter the products in admin based on options * * @access public * @param mixed $query * @return void */ function wpa104537_featured_products_admin_filter_query( $query ) { global $typenow, $wp_query; if ( $typenow == 'product' ) { // Subtypes if ( ! empty( $_GET['featured_status'] ) ) { if ( $_GET['featured_status'] == 'featured' ) { $query->query_vars['meta_value'] = 'yes'; $query->query_vars['meta_key'] = '_featured'; } elseif ( $_GET['featured_status'] == 'normal' ) { $query->query_vars['meta_value'] = 'no'; $query->query_vars['meta_key'] = '_featured'; } } } } add_filter( 'parse_query', 'wpa104537_featured_products_admin_filter_query' ); 

Обновлено для WooCommerce 3.0

parse_query вызов parse_query должен быть обновлен, так как статус признака больше не сохраняется как сообщение meta.

 /** * Filter the products in admin based on options * * @access public * @param mixed $query * @return void */ 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' ); 

Я нашел этот плагин: https://wordpress.stackexchange.com/a/45447/15190 , который я смог настроить, чтобы предоставить список выбора для фильтрации по Featured. При этом я могу затем использовать функцию перетаскивания продуктов сортировки WooCommerce, чтобы легко изменить порядок появления Рекомендуемых продуктов в виджетах Featured Products и других местах.

Вот код с моими настройками, которые заставят его работать для WooCommerce. Рекомендуемые продукты:

 <?php /* Plugin Name: Admin Filter By WooCommerce Featured Products Plugin URI: http://en.bainternet.info Description: adapted from https://wordpress.stackexchange.com/q/45436/2487. Allows you to show only Featured products, which will then allow for drag and drop sorting of Featured products Version: 1.0 Author: Bainternet Author URI: http://en.bainternet.info */ add_action( 'restrict_manage_posts', 'wpse45436_admin_posts_filter_restrict_manage_posts' ); /** * First create the dropdown * * @author Ohad Raz * * @return void */ function wpse45436_admin_posts_filter_restrict_manage_posts(){ $type = 'post'; if (isset($_GET['post_type'])) { $type = $_GET['post_type']; } //only add filter to post type you want if ('product' == $type){ //change this to the list of values you want to show //in 'label' => 'value' format $values = array( 'Show Only Featured' => 'Yes', 'Show Only Non-Featured' => 'No', ); ?> <select name="Featured"> <option value=""><?php _e('Show Featured & Non-Featured', 'wpse45436'); ?></option> <?php $current_v = isset($_GET['Featured'])? $_GET['Featured']:''; foreach ($values as $label => $value) { printf ( '<option value="%s"%s>%s</option>', $value, $value == $current_v? ' selected="selected"':'', $label ); } ?> </select> <?php } } add_filter( 'parse_query', 'wpse45436_posts_filter' ); /** * if submitted filter by post meta * * @author Ohad Raz * @param (wp_query object) $query * * @return Void */ function wpse45436_posts_filter( $query ){ global $pagenow; $type = 'post'; if (isset($_GET['post_type'])) { $type = $_GET['post_type']; } if ( 'product' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['Featured']) && $_GET['Featured'] != '') { $query->query_vars['meta_key'] = '_featured'; $query->query_vars['meta_value'] = $_GET['Featured']; } }