-
-
Save ivandoric/089443880872f1b81ae74f2502e41a1c to your computer and use it in GitHub Desktop.
<?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_posts() { | |
$args = [ | |
'numberposts' => 99999, | |
'post_type' => 'post' | |
]; | |
$posts = get_posts($args); | |
$data = []; | |
$i = 0; | |
foreach($posts as $post) { | |
$data[$i]['id'] = $post->ID; | |
$data[$i]['title'] = $post->post_title; | |
$data[$i]['content'] = $post->post_content; | |
$data[$i]['slug'] = $post->post_name; | |
$data[$i]['featured_image']['thumbnail'] = get_the_post_thumbnail_url($post->ID, 'thumbnail'); | |
$data[$i]['featured_image']['medium'] = get_the_post_thumbnail_url($post->ID, 'medium'); | |
$data[$i]['featured_image']['large'] = get_the_post_thumbnail_url($post->ID, 'large'); | |
$i++; | |
} | |
return $data; | |
} | |
function wl_post( $slug ) { | |
$args = [ | |
'name' => $slug['slug'], | |
'post_type' => 'post' | |
]; | |
$post = get_posts($args); | |
$data['id'] = $post[0]->ID; | |
$data['title'] = $post[0]->post_title; | |
$data['content'] = $post[0]->post_content; | |
$data['slug'] = $post[0]->post_name; | |
$data['featured_image']['thumbnail'] = get_the_post_thumbnail_url($post[0]->ID, 'thumbnail'); | |
$data['featured_image']['medium'] = get_the_post_thumbnail_url($post[0]->ID, 'medium'); | |
$data['featured_image']['large'] = get_the_post_thumbnail_url($post[0]->ID, 'large'); | |
return $data; | |
} | |
// Used in this video https://www.youtube.com/watch?v=76sJL9fd12Y | |
function wl_products() { | |
$args = [ | |
'numberposts' => 99999, | |
'post_type' => 'products' | |
]; | |
$posts = get_posts($args); | |
$data = []; | |
$i = 0; | |
foreach($posts as $post) { | |
$data[$i]['id'] = $post->ID; | |
$data[$i]['title'] = $post->post_title; | |
$data[$i]['slug'] = $post->post_name; | |
$data[$i]['price'] = 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', 'posts', [ | |
'methods' => 'GET', | |
'callback' => 'wl_posts', | |
]); | |
register_rest_route( 'wl/v1', 'posts/(?P<slug>[a-zA-Z0-9-]+)', array( | |
'methods' => 'GET', | |
'callback' => 'wl_post', | |
) ); | |
// Used in this video: https://www.youtube.com/watch?v=76sJL9fd12Y | |
register_rest_route('wl/v1', 'products', [ | |
'methods' => 'GET', | |
'callback' => 'wl_products', | |
]); | |
}); |
Did you watch the video? There is no Custom API plugin. You create it yourself.
When i call a ACF field in this its show result as "url": null
$data[$i]['url'] = get_field( "url", $post->ID );
@banna360 Are you sure it should just be url? Check the API response. Maybe it's something like $data[$i]['acf_fields']['url']
or something like that. I think ACF would wrap it's fields inside another array. Not 100% sure, but you can test it out.
Thank you for this code,
I want to send push notification to the mobile app when I publish (Custom post type) POST in WordPress,
I have Java spring Rest API that sends a notification, I want to integrate it with the custom post, How can I do this can you guide me?
Thank you
Custom Post Plugin Code
`<?php
/*
Plugin Name: Send Notification CPT
Description: Declares a plugin that will create a custom post type to send notifications.
Version: 1.0
*/
if( ! defined('ABSPATH')) {
exit;
}
// Register Custom Post Type Send Notifiction
function create_sendnotifiction_cpt() {
$labels = array(
'name' => _x( 'Send Notifiction', 'Post Type General Name', 'textdomain' ),
'singular_name' => _x( 'Send Notifiction', 'Post Type Singular Name', 'textdomain' ),
'menu_name' => _x( 'Send Notifiction', 'Admin Menu text', 'textdomain' ),
'name_admin_bar' => _x( 'Send Notifiction', 'Add New on Toolbar', 'textdomain' ),
'archives' => __( 'Send Notifiction Archives', 'textdomain' ),
'attributes' => __( 'Send Notifiction Attributes', 'textdomain' ),
'parent_item_colon' => __( 'Parent Send Notifiction:', 'textdomain' ),
'all_items' => __( 'All Send Notifiction', 'textdomain' ),
'add_new_item' => __( 'Add New Send Notifiction', 'textdomain' ),
'add_new' => __( 'Add New', 'textdomain' ),
'new_item' => __( 'New Send Notifiction', 'textdomain' ),
'edit_item' => __( 'Edit Send Notifiction', 'textdomain' ),
'update_item' => __( 'Update Send Notifiction', 'textdomain' ),
'view_item' => __( 'View Send Notifiction', 'textdomain' ),
'view_items' => __( 'View Send Notifiction', 'textdomain' ),
'search_items' => __( 'Search Send Notifiction', 'textdomain' ),
'not_found' => __( 'Not found', 'textdomain' ),
'not_found_in_trash' => __( 'Not found in Trash', 'textdomain' ),
'featured_image' => __( 'Featured Image', 'textdomain' ),
'set_featured_image' => __( 'Set featured image', 'textdomain' ),
'remove_featured_image' => __( 'Remove featured image', 'textdomain' ),
'use_featured_image' => __( 'Use as featured image', 'textdomain' ),
'insert_into_item' => __( 'Insert into Send Notifiction', 'textdomain' ),
'uploaded_to_this_item' => __( 'Uploaded to this Send Notifiction', 'textdomain' ),
'items_list' => __( 'Send Notifiction list', 'textdomain' ),
'items_list_navigation' => __( 'Send Notifiction list navigation', 'textdomain' ),
'filter_items_list' => __( 'Filter Send Notifiction list', 'textdomain' ),
);
$args = array(
'label' => __( 'Send Notifiction', 'textdomain' ),
'description' => __( '', 'textdomain' ),
'labels' => $labels,
'menu_icon' => 'dashicons-format-chat',
'supports' => array('title', 'editor', 'excerpt', 'thumbnail', 'revisions', 'author', 'comments', 'trackbacks', 'page-attributes', 'post-formats', 'custom-fields'),
'taxonomies' => array(),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'hierarchical' => false,
'exclude_from_search' => false,
'show_in_rest' => true,
'publicly_queryable' => true,
'capability_type' => 'post',
);
register_post_type( 'sendnotifiction', $args );
}
add_action( 'init', 'create_sendnotifiction_cpt', 0 );
///
function my_plugin_rest_route_for_term( $route, $term ) {
if ( $term->taxonomy === 'genre' ) {
$route = 'http://192.168.100.24:8181/notification/topic' . $term->term_id;
}
return $route;
}
add_filter( 'rest_route_for_term', 'my_plugin_rest_route_for_term', 10, 2 );
//
function rewrite_tuts_flush(){
create_vehicle_details();
flush_rewrite_rules();
}
?>`
@hamzu06 I have no idea man, sorry.
Thank You @ivandoric, my issue is resolved.
Thank You @ivandoric
@theahmedoff No problem! :)
custom post type shows field values on all posts url but shows null values on single post url.
Hey I wanna thank you for this snippet. It really helped me man.
I would want to ask you if there is a way to have an offset or a pagination inside the rest-api ? I want to add another filter like "?page=1,2,3" etc
Thank you.
Hi,
I tried the way you coded the endpoint, but for some reason my endpoint is not working.
When I go to the endpoints I'm directed towards the homepage of the site.
Can you help? Thanks in advance
Pastebin: https://pastebin.com/LeeEnMvb
@Esiarp Maybe you need to change the permalinks in WP admin. To use something like /postname/ instead of /?p=123
@ivandoric That was exactly the issue! I changed it to "Day and name" and works perfectly. Thank you!
@ivandoric First of all thank you to share this content for us. But, I have some problems at this code. I don't know where can I find the endpoints for the wordpress article. For example I want to get post category but I don't know the endpoint for category like get_the_post_thumbnail_url. Please help us.
Thank you for code again
does simply running the code add it as a plug in? that is the part I cannot figure out still lol
can i use ?slug= or /id like>> http://site/wp-json/wp/v2/posts/id or ?slug= with this plugin ? No . and why i cant:)
I can not find the Custom API plugin in wordpress plugins, from where i can download it?