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; | |
} | |
} |
update last 4 lines with this to avoid errors.
// Ensure $query->tax_query is an object and has the 'queries' property initialized
if ( ! is_object( $query->tax_query ) ) {
$query->tax_query = new WP_Tax_Query( array() );
}
// Now check if 'queries' property exists; if not, initialize it as an empty array
if ( ! isset( $query->tax_query->queries ) || ! is_array( $query->tax_query->queries ) ) {
$query->tax_query->queries = array();
}
// You can now safely add your additional query
$query->tax_query->queries[] = $additional_query;
// Make sure to reassign the tax_query to query_vars to ensure it's used in the main query
$query->query_vars['tax_query'] = $query->tax_query->queries;
}
}
Thanks a lot.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you!