wp-plugin-boilerplate/includes/front/class-rewrites.php

102 lines
2.2 KiB
PHP

<?php
namespace PluginNamespace\Front;
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class Rewrites {
/**
* Class constructor.
*
* @package PluginNamespace\Front\Rewrites
* @since 1.0.0
*
* @return void
*/
public function __construct() {
add_action( 'init', array( $this, 'add_rewrite_rules' ), 5 );
add_filter( 'query_vars', array( $this, 'custom_query_vars' ) );
add_filter( 'nmsp_plugin_name_rewrite_urls', array( $this, 'build_rewrite_urls' ) );
}
/**
* Generate new rewrite rules and flush the cached values.
*
* @package PluginNamespace\Front\Rewrites
* @since 1.0.0
*
* @return void
*/
public function add_rewrite_rules(): void {
$filters = apply_filters( 'nmsp_plugin_name_rewrite_urls', array() );
add_rewrite_tag( 'foo', '([0-9]+)' );
if ( is_iterable( $filters ) && count( $filters ) > 0 ) {
foreach ( $filters as $item ) {
if ( $item['slug'] ) {
$slug = str_replace( home_url() . '/', '', get_permalink( $item['id'] ) );
add_rewrite_rule( '^' . $slug . '([^/]*' . $item['var'] . ')/([^/]*)/?', 'index.php?page_id=' . $item['id'] . '&$matches[1]=$matches[2]', 'top' );
}
}
flush_rewrite_rules();
}
}
/**
* Build the array of post IDs that have a slug for the URL
* along with what custom query variable to use.
*
* @package PluginNamespace\Front\Rewrites
* @since 1.0.0
*
* @return array<int, array<string, string>>
*/
public function build_rewrite_urls(): array {
$pages = array();
$page_list = array(
'NMSP_PLUGIN_SLUG_PAGE_NAME' => array( 'foo' ),
);
foreach ( $page_list as $key => $params ) {
$page_id = get_option( constant( $key ) );
$page = ( $page_id ) ? get_post( $page_id ) : false;
if ( ! empty( $page ) ) {
foreach ( $params as $param ) {
$pages[] = array(
'id' => $page_id,
'slug' => $page->post_name,
'var' => $param,
);
}
}
}
return $pages;
}
/**
* Append custom query variables to the list WordPress maintinas
* with each request.
*
* @package PluginNamespace\Front\Rewrites
* @since 1.0.0
*
* @param array<int, string> $vars
*
* @return array<int, string>
*/
public function custom_query_vars( array $vars ): array {
$vars[] = 'foo';
return $vars;
}
}
new Rewrites();