Skip to content

Instantly share code, notes, and snippets.

@weszty
Forked from ivandoric/wl-api.php
Created August 3, 2021 13:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save weszty/155c22490aa3bf0cbf284eba0769bc67 to your computer and use it in GitHub Desktop.
Save weszty/155c22490aa3bf0cbf284eba0769bc67 to your computer and use it in GitHub Desktop.
WordPress Rest API Custom Filters (Video Tutorials Notes) - Check out the video: https://www.youtube.com/watch?v=5rSfAkLO5eo
<?php
/**
* Plugin Name: Custom API
* Plugin URI: http://chrushingit.com
* Description: Crushing it!
* Version: 1.0
* Author: Art Vandelay
* Author URI: http://watch-learn.com
*/
function wl_products($params) {
$price = json_decode($params->get_param('price'));
function queryArgument($param, $key) {
if(is_object($param)) {
if($param->lt && $param->gt) {
return [
[
'key' => $key,
'value' => [$param->gt, $param->lt],
'type' => 'NUMERIC',
'compare' => 'BETWEEN'
]
];
}
if($param->lt) {
return [
[
'key' => $key,
'value' => $param->lt,
'type' => 'NUMERIC',
'compare' => '<'
]
];
}
if($param->gt) {
return [
[
'key' => $key,
'value' => $param->gt,
'type' => 'NUMERIC',
'compare' => '>'
]
];
}
}
if($param) {
return [
[
'key' => $key,
'value' => $param,
'type' => 'NUMERIC'
]
];
}
return null;
}
$args = [
'posts_per_page' => 99999,
'post_type' => 'product',
'meta_query' => queryArgument($price, 'price')
];
$posts = new WP_Query($args);
$data = [];
$i = 0;
foreach($posts->posts as $post) {
$data[$i]['id'] = $post->ID;
$data[$i]['title'] = $post->post_title;
$data[$i]['slug'] = $post->post_name;
$data[$i]['price'] = intval(get_field('price', $post->ID));
$data[$i]['delivery'] = get_field('delivery', $post->ID);
$i++;
}
return $data;
}
add_action('rest_api_init', function() {
register_rest_route('wl/v1', 'products', [
'methods' => 'GET',
'callback' => 'wl_products',
]);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment