WooCommerce - filtrare după produse recomandate în panoul de administrare
WooCommerce are o modalitate simplă de a selecta produsele "Recomandate" prin clic pe o mică pictogramă cu stea în coloana "Featured" din zona de administrare.
Am nevoie să pot filtra și afișa doar produsele recomandate în panoul de administrare. Știe cineva o metodă simplă de a face acest lucru?
Am cercetat și am aflat că acest lucru se realizează prin perechi cheie/valoare meta, unde _featured
este cheia și valoarea este fie yes
fie no
.
Din păcate, deoarece nu se folosește taxonomii precum categoriile de produse, nu există posibilitatea de a utiliza funcționalitatea de filtrare din panoul de administrare pentru a afișa doar produsele recomandate. Poți sorta coloana de recomandate astfel încât acestea să apară fie în partea de sus fie de jos a listei de produse, dar asta e tot.
Puteți sorta lista de produse după statutul de recomandate. Doar faceți clic pe steaua din partea de sus a coloanei... o dată va aduce toate produsele nerecomandate în partea de sus, iar de două ori va inversa și va aduce toate produsele recomandate în partea de sus.
URL-ul dvs. de administrare va arăta astfel:
/wp-admin/edit.php?post_type=product&orderby=featured&order=desc
ACTUALIZARE:
Ok, s-a dovedit că nu este atât de greu să filtrezi după statutul de recomandat. WooCommerce filtrează după "subtype", și deoarece acesta filtrează și după meta, putem în mare parte copia codul lor și face câteva ajustări.
Prima funcție adaugă elementul select/drop-down, în timp ce a doua se ocupă de ajustările la interogarea de administrare.
/**
* Filtrează produsele după tip
*
* @access public
* @return void
*/
function wpa104537_filter_products_by_featured_status() {
global $typenow, $wp_query;
if ($typenow=='product') :
// Recomandate/ Nerecomandate
$output .= "<select name='featured_status' id='dropdown_featured_status'>";
$output .= '<option value="">'.__( 'Afișează toate statuturile de recomandate', 'woocommerce' ).'</option>';
$output .="<option value='featured' ";
if ( isset( $_GET['featured_status'] ) ) $output .= selected('featured', $_GET['featured_status'], false);
$output .=">".__( 'Recomandate', 'woocommerce' )."</option>";
$output .="<option value='normal' ";
if ( isset( $_GET['featured_status'] ) ) $output .= selected('normal', $_GET['featured_status'], false);
$output .=">".__( 'Nerecomandate', 'woocommerce' )."</option>";
$output .="</select>";
echo $output;
endif;
}
add_action('restrict_manage_posts', 'wpa104537_filter_products_by_featured_status');
/**
* Filtrează produsele în administrare pe baza opțiunilor
*
* @access public
* @param mixed $query
* @return void
*/
function wpa104537_featured_products_admin_filter_query( $query ) {
global $typenow, $wp_query;
if ( $typenow == 'product' ) {
// Subtipuri
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' );
Actualizat pentru WooCommerce 3.0
Callback-ul parse_query
trebuie actualizat deoarece statutul de recomandat nu mai este stocat ca post meta.
/**
* Filtrează produsele în administrare pe baza opțiunilor
*
* @access public
* @param mixed $query
* @return void
*/
function wpa104537_featured_products_admin_filter_query( $query ) {
global $typenow;
if ( $typenow == 'product' ) {
// Subtipuri
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' );

Mulțumesc. După cum am menționat în ultima propoziție a întrebării mele, sunt conștient de acea funcție de sortare. Totuși, doresc să folosesc funcția "Sortare Produse", care permite sortarea prin drag and drop, pentru a sorta Produsele Recomandate, lucru care nu este posibil în mod implicit.
Puteți filtra după categorie, apoi apăsați "Sortare Produse" și le puteți trage în ordinea dorită. Vreau asta pentru produsele recomandate...

Tocmai citeam un articol despre cum oamenii nu citesc articolele în întregime pe internet, se pare că m-ai prins. Verifică ediția mea.

Se pare că eu îmi găseam soluția în timp ce tu postai a ta, și arată similar. Mulțumesc!

Da, se pare că facem același lucru. O modificare drăguțică... s-ar putea să o folosesc și pe site-urile mele.

În WordPress(4.7.5) și WooCommerce(3.0.7), codul tău nu funcționează.

Păi e veche de 4 ani iar WooCommerce a suferit o revoluție majoră cu lansarea versiunii 3.0. Am actualizat și pare să funcționeze.

Mulțumesc foarte mult! O parte din noul cod este în afara. Vă sugerez să îl verificați.

@helgatheviking Ești genial! Mulțumesc pentru asta; funcționează perfect în WP 4.8.3 și WC 3.1.2

Am găsit acest plugin: https://wordpress.stackexchange.com/a/45447/15190, pe care l-am adaptat pentru a oferi o listă de selecție pentru filtrarea după produse Recomandate. Cu aceasta, pot folosi funcția de sortare prin drag and drop din WooCommerce pentru a schimba ușor ordinea în care apar produsele Recomandate în widget-ul de Produse Recomandate și în alte locuri.
Iată codul cu adaptările mele care îl vor face să funcționeze pentru Produsele Recomandate WooCommerce:
<?php
/*
Plugin Name: Admin Filter By WooCommerce Featured Products
Plugin URI: http://en.bainternet.info
Description: adaptat din https://wordpress.stackexchange.com/q/45436/2487. Permite afișarea doar a produselor Recomandate, ceea ce va permite sortarea prin drag and drop a produselor Recomandate
Version: 1.0
Author: Bainternet
Author URI: http://en.bainternet.info
*/
add_action( 'restrict_manage_posts', 'wpse45436_admin_posts_filter_restrict_manage_posts' );
/**
* Mai întâi se creează dropdown-ul
*
* @author Ohad Raz
*
* @return void
*/
function wpse45436_admin_posts_filter_restrict_manage_posts(){
$type = 'post';
if (isset($_GET['post_type'])) {
$type = $_GET['post_type'];
}
//se adaugă filtrul doar la tipul de postare dorit
if ('product' == $type){
//schimbați aceasta cu lista de valori pe care doriți să o afișați
//în formatul 'etichetă' => 'valoare'
$values = array(
'Afișează doar Recomandate' => 'Yes',
'Afișează doar Nerecomandate' => 'No',
);
?>
<select name="Featured">
<option value=""><?php _e('Afișează Recomandate și Nerecomandate', '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' );
/**
* dacă este trimis, filtrează după meta post
*
* @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'];
}
}

Nu uitați să selectați unul dintre răspunsurile noastre ca răspuns oficial pentru a muta această întrebare din categoria 'întrebări fără răspuns'.

În WordPress(4.7.5) și WooCommerce(3.0.7), codul tău nu funcționează.

Puteți utiliza plugin-ul WordPress Filter Featured Products for WooCommerce.

Deși nu a fost actualizat de mult timp, încă funcționează perfect. Mulțumesc
