Simple routing for WordPress.¶
Installation¶
Require WP Routes with composer
Code:
$ composer require devaly/wordpress-routes
Or Download the WP Routes from [Releases](https://github.com/DevAly/wordpress-routes/releases) assets wordpress-routes.zip and install as wordpress plugin
### Basic Usage Code:
<?php
/* functions.php */
Routes::map('myfoo/bar', 'my_callback_function');
Routes::map('my-events/:event', function($params) {
$event_slug = $params['event'];
$event = new ECP_Event($event_slug);
$query = new WPQuery(); //if you want to send a custom query to the page's main loop
Routes::load('single.php', array('event' => $event), $query, 200);
?>
Using routes makes it easy for you to implement custom pagination — and anything else you might imagine in your wildest dreams of URLs and parameters. OMG so easy!
## Some examples In your functions.php file, this can be called anywhere (don’t hook it to init or another action or it might be called too late)
Code:
<?php
Routes::map('blog/:name', function($params){
$query = 'posts_per_page=3&post_type='.$params['name'];
Routes::load('archive.php', null, $query, 200);
});
Routes::map('blog/:name/page/:pg', function($params){
$query = 'posts_per_page=3&post_type='.$params['name'].'&paged='.$params['pg'];
$params = array('thing' => 'foo', 'bar' => 'I dont even know');
Routes::load('archive.php', $params, $query);
?>
Map
Routes::map($pattern, $callback)
Usage¶
A functions.php where I want to display custom paginated content:
Code:
<?php
Routes::map('info/:name/page/:pg', function($params){
//make a custom query based on incoming path and run it...
$query = 'posts_per_page=3&post_type='.$params['name'].'&paged='.intval($params['pg']);
//load up a template which will use that query
Routes::load('archive.php', null, $query);
?>
Usage with class using namespaces¶
Code:
<?php
Routes::map('info/:name/page/:pg',['App\Controllers\PublicController','infoFunction']);
?>
The arguments will passed automatically to the class function
Code:
<?php
namespace App\Controllers;
class PublicController
{
/**
* @return void
* @throws \Exception
*/
public function testFunction($name,$pg) {
}
}
?>
Usage without namespaces¶
Code:
<?php
require plugin_dir_path(__FILE__).'/App/Controllers/PublicController.php';
Routes::map('info/:name/page/:pg',[PublicController::class,'infoFunction']);
?>
Also the arguments will passed automatically to the class function
Code:
<?php
namespace App\Controllers;
class PublicController
{
/**
* @return void
* @throws \Exception
*/
public function testFunction($name,$pg) {
}
}
?>
### Arguments
:param $pattern (required) Set a pattern for Routes to match on, by default everything is handled as a string. Any segment that begins with a : is handled as a variable, for example:
To paginate:
`
page/:pagenum
`
To edit a user:
`
my-users/:userid/edit
`
$callback A function that should fire when the pattern matches the request. Callback takes one argument which is an array of the parameters passed in the URL.
So in this example: ‘info/:name/page/:pg’, $params would have data for: * $data[‘name’] * $data[‘pg’]
… which you can use in the callback function as a part of your query
Load¶
Routes::load($php_file, $args, $query = null, $status_code = 200)
### Arguments
$php_file (required) A PHP file to load, in my experience this is usually your archive.php or a generic listing page (but don’t worry it can be anything!)
$template_params Any data you want to send to the resulting view. Example:
Code:
<?php
/* functions.php */
Routes::map('info/:name/page/:pg', function($params){
//make a custom query based on incoming path and run it...
$query = 'posts_per_page=3&post_type='.$params['name'].'&paged='.intval($params['pg']);
//load up a template which will use that query
$params = array();
$params['my_title'] = 'This is my custom title';
Routes::load('archive.php', $params, $query, 200);
?>
Code:
<?php
/* archive.php */
global $params;
$context['wp_title'] = $params['my_title']; // "This is my custom title"
/* the rest as normal... */
Timber::render('archive.twig', $context);
$query
The query you want to use, it can accept a string or array just like `Timber::get_posts` -- use the standard WP_Query syntax (or a WP_Query object too)
`$status_code`
Send an optional status code. Defaults to 200 for 'Success/OK'
?>