Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save mclarenmervin/9de2058f6b6ec1c5a431d7e26f23989e to your computer and use it in GitHub Desktop.
Save mclarenmervin/9de2058f6b6ec1c5a431d7e26f23989e to your computer and use it in GitHub Desktop.
<?php
function sp_edd_filter_query($query, $atts)
{
// We're going to modify the order and orderby parameters depending on variables contained in the URL
if (isset($_GET['sp_orderby'])) {
$orderby = $_GET['sp_orderby'];
if(isset($orderby) && $orderby == 'free') {
// Add meta query to filter downloads with price zero
$meta_query = isset($query['meta_query']) ? $query['meta_query'] : array();
// print_r($meta_query);
$meta_query[] = array(
'key' => 'edd_price',
'value' => '0',
'compare' => '='
);
$query['meta_query'] = $meta_query;
} else if(isset($orderby) && $orderby == 'paid') {
// Add meta query to filter downloads with price zero
$meta_query = isset($query['meta_query']) ? $query['meta_query'] : array();
// print_r($meta_query);
$meta_query[] = array(
'key' => 'edd_price',
'value' => '0',
'compare' => '!='
);
$query['meta_query'] = $meta_query;
}
}
// Return the query, with thanks
return $query;
}
add_filter('edd_downloads_query', 'sp_edd_filter_query', 10, 2);
function sp_edd_add_dropdown($display)
{
$orderby = '';
// Get the current parameter
if (isset($_GET['sp_orderby'])) {
$orderby = $_GET['sp_orderby'];
}
// Get the array of parameters
$params = sp_edd_orderby_params();
$select = '';
if (!empty($params)) {
// Build the select field
$select = '<form class="sp-edd-sorting">';
$select .= '<select class="sp-orderby" name="sp_orderby">';
// Iterate through each parameter to add options to the select field
foreach ($params as $param) {
$select .= '<option value="' . $param['id'] . '" ' . selected($param['id'], $orderby, false) . '>' . $param['title'] . '</option>';
}
$select .= '</select>';
$select .= '</form>';
// Add a script to submit the form when a new selection is made
$select .= '<script>
jQuery(document).ready(function($) {
$(".sp-orderby").change( function(){
$(this).closest("form").submit();
});
});
</script>';
// Add the select field to the top of the downloads grid
$display = $select . $display;
}
return $display;
}
add_filter('downloads_shortcode', 'sp_edd_add_dropdown', 10, 1);
function sp_edd_orderby_params()
{
$params = array(
'all' => array(
'id' => 'all',
'title' => __('All Extenssion', 'sp-for-edd'),
'orderby' => 'edd_price', // Orderby parameter, must be legit WP_Query orderby param
),
'free' => array(
'id' => 'free',
'title' => __('Free Extenssion', 'sp-for-edd'),
'orderby' => 'edd_price',
),
'paid' => array(
'id' => 'paid',
'title' => __('Paid Extenssion', 'sp-for-edd'),
'orderby' => 'edd_price',
),
);
$params = apply_filters('sp_edd_filter_orderby_params', $params);
return $params;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment