Last active
February 24, 2024 04:35
-
-
Save statickidz/6a539550d8e0d13d2c3d12318672e816 to your computer and use it in GitHub Desktop.
Woocommerce - Show Custom Filter and Admin Column for Catalog Visibility
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @snippet Show Custom Filter and Admin Column for Catalog Visibility @ WooCommerce Products Admin | |
* @sourcecode https://gist.github.com/statickidz/6a539550d8e0d13d2c3d12318672e816 | |
* @author Adrián Barrio Andrés (statickidz.com) | |
*/ | |
add_filter('woocommerce_product_filters', 'skidz_filter_by_catalog_visibility_dashboard_products'); | |
function skidz_filter_by_catalog_visibility_dashboard_products($output) | |
{ | |
$selected_visible = isset($_GET['catalog_visibility']) && $_GET['catalog_visibility'] === 'visible' ? 'selected' : ''; | |
$selected_hidden = isset($_GET['catalog_visibility']) && $_GET['catalog_visibility'] === 'hidden' ? 'selected' : ''; | |
$selected_catalog = isset($_GET['catalog_visibility']) && $_GET['catalog_visibility'] === 'catalog' ? 'selected' : ''; | |
$selected_search = isset($_GET['catalog_visibility']) && $_GET['catalog_visibility'] === 'search' ? 'selected' : ''; | |
$output .= ' | |
<select name="catalog_visibility"> | |
<option value="">' . __('Filter by', 'woocommerce') . ' ' . __('Visibility', 'woocommerce') . '</option> | |
<option value="visible" ' . $selected_visible . '>' . __('Shop and search results', 'woocommerce') . '</option> | |
<option value="catalog" ' . $selected_catalog . '>' . __('Shop only', 'woocommerce') . '</option> | |
<option value="search" ' . $selected_search . '>' . __('Search results only', 'woocommerce') . '</option> | |
<option value="hidden" ' . $selected_hidden . '>' . __('Hidden', 'woocommerce') . '</option> | |
</select>'; | |
return $output; | |
} | |
add_filter('parse_query', 'skidz_catalog_visibility_filter'); | |
function skidz_catalog_visibility_filter($query) | |
{ | |
global $pagenow; | |
$type = 'product'; | |
if (isset($_GET['post_type'])) { | |
$type = $_GET['post_type']; | |
} | |
if ('product' == $type && is_admin() && $pagenow == 'edit.php' && isset($_GET['catalog_visibility']) && $_GET['catalog_visibility'] != '') { | |
$catalog_visibility = $_GET['catalog_visibility']; | |
$additional_query = array(); | |
if ($catalog_visibility === 'hidden') { | |
$additional_query = array( | |
'relation' => 'AND', | |
array( | |
'taxonomy' => 'product_visibility', | |
'field' => 'slug', | |
'terms' => array('exclude-from-search'), | |
), | |
array( | |
'taxonomy' => 'product_visibility', | |
'field' => 'slug', | |
'terms' => array('exclude-from-catalog'), | |
), | |
); | |
} else if ($catalog_visibility === 'visible') { | |
$additional_query = array( | |
'taxonomy' => 'product_visibility', | |
'field' => 'slug', | |
'terms' => array('exclude-from-search', 'exclude-from-catalog'), | |
'operator' => 'NOT IN', | |
); | |
} else if ($catalog_visibility === 'catalog') { | |
$additional_query = array( | |
'relation' => 'AND', | |
array( | |
'taxonomy' => 'product_visibility', | |
'field' => 'slug', | |
'terms' => array('exclude-from-search'), | |
'operator' => 'IN', | |
), | |
array( | |
'taxonomy' => 'product_visibility', | |
'field' => 'slug', | |
'terms' => array('exclude-from-catalog'), | |
'operator' => 'NOT IN', | |
), | |
); | |
} else if ($catalog_visibility === 'search') { | |
$additional_query = array( | |
'relation' => 'AND', | |
array( | |
'taxonomy' => 'product_visibility', | |
'field' => 'slug', | |
'terms' => array('exclude-from-search'), | |
'operator' => 'NOT IN', | |
), | |
array( | |
'taxonomy' => 'product_visibility', | |
'field' => 'slug', | |
'terms' => array('exclude-from-catalog'), | |
'operator' => 'IN', | |
), | |
); | |
} | |
$query->tax_query->queries[] = $additional_query; | |
$query->query_vars['tax_query'] = $query->tax_query->queries; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
update last 4 lines with this to avoid errors.
}