Arha Routes
WordPress plugin that helps to serve content through REST routes and gives customizability to developers through filters.
Available Routes
/wp-json/arha/v1/post/wp-json/arha/v1/page/wp-json/arha/v1/options/wp-json/arha/v1/archive
Example queries
/wp-json/arha/v1/post?post_type=POST_TYPE&slug=SLUG/wp-json/arha/v1/page?path=PATH/wp-json/arha/v1/options/wp-json/arha/v1/archive?post_type=POST_TYPE&posts_per_page=POSTS_PER_PAGE&paged=PAGED&orderby=ORDERBY&order=ORDER
tax_query and meta_query in archive-route
tax_queryandmeta_queryare supported and they work how the query is built for it innew WP_Query()- both needs their values to bes passed in as stringified json
Multiple post_types in archive-route
- To pass multiple post_types in archive-route, use syntax that lets PHP read GET-param as an array. https://stackoverflow.com/a/9547490
Filters
-
To exclude querying specific post types from
post— andarchive-routes, you can use following filters:` add_filter(‘arha_routes/archive_excluded_post_types’, ‘exclude_post_types’); add_filter(‘arha_routes/post_excluded_post_types’, ‘exclude_post_types’);
function exclude_post_types($excluded_post_types) { $excluded_post_types = [‘post’]; return $excluded_post_types; } `
- To format
post-route’s post before it’s served to client, usearha_routes/format_post-filter ` add_filter(‘arha_routes/format_post’, ‘format_post’);
function format_post($post) { return $post; } `
- To format
page-route’s post before it’s served to client, usearha_routes/format_page-filter ` add_filter(‘arha_routes/format_page’, ‘format_page’);
function format_page($page) { return $page; } `
-
To format
archive-route’s posts before they are served to client, usearha_routes/format_archive_post-filteradd_filter('arha_routes/format_archive_post', 'format_archive_post'); function format_archive_post($post) { return $post; } -
options-route returns empty result by default. To add content to it, usearha_routes/format_options-filter ` add_filter(‘arha_routes/format_options’, ‘format_options’);
function format_options($options) { return $options; } `
-
By default Arha Routes returns only published content with post-, page- and archive-route, this can be modified by adding following filters. ` // for archive route add_filter(‘arha_routes/allowed_post_statuses_archive’, ‘allowed_post_statuses’); // for post route add_filter(‘arha_routes/allowed_post_statuses_post’, ‘allowed_post_statuses’); // for page route add_filter(‘arha_routes/allowed_post_statuses_page’, ‘allowed_post_statuses’); function allowed_post_statuses($post_statuses) { // … change post_statuses array
return $post_statuses; } ` After adding setting up these filters, request can include «post_status» parameter and it will be compared to $post_statuses array.
SearchWP
Arha Routes supports SearchWP-plugin, which lets WP users to make keyword search engine for their content.
Activating SearchWP-plugin adds optional keyword-search functionality to archive-route. This is done by adding s=KEYWORD to the route
— Example: /wp-json/arha/v1/archive?post_type=products&posts_per_page=10&paged=1&orderby=date&order=ASC&s=monitor
Polylang
Arha Routes supports Polylang-plugin, which allows users to create content in multiple languages.
Activating Polylang changes how endpoints work:
- All routes require additional
lang-param- Example:
/wp-json/arha/v1/archive?post_type=products&posts_per_page=10&paged=1&orderby=date&order=ASC&lang=en
- Example:
page-route doesn’t support language prefix in path- Example: Permalink
/zh/info, use like this/wp-json/arha/v1/page?path=/info&lang=zh - Example: Permalink
/en/info/test, use like this/wp-json/arha/v1/page?path=/info/test&lang=zh
- Example: Permalink
options-route passeslang-param forward toarha_routes/format_options-filteradd_filter('arha_routes/format_options', 'format_options', 10, 2); function format_options($options, $lang) { return $options; }
Polylang + SearchWP
In order to make these two plugins work together, you need to add extra plugin to WP installation.
https://searchwp.com/extensions/polylang-integration/