Vehicle_URLs_By_VIN
Source Source
File: includes/class-vehicle-urls-by-vin.php
class Vehicle_URLs_By_VIN { /** * Adds hooks that power the URL redirects. * * @return void */ public function add_hooks() { add_filter( 'invp_rewrite_rules', array( $this, 'add_vin_rewrite_rule' ) ); add_filter( 'query_vars', array( $this, 'add_query_vars' ) ); add_action( 'template_redirect', array( $this, 'redirect_vin_urls' ) ); } /** * Adds a rewrite rule to redirect URLs like https://demo.inventorypresser.com/vin/JM1NB354940406328/ * * @param array $rules An array of rewrite rules. * @return array */ public function add_vin_rewrite_rule( $rules ) { // Allow VINs as short as five digits because classic cars. $rules['^vin/([A-Z0-9]{5,17})/?$'] = 'index.php?vin=$matches[1]'; return $rules; } /** * Adds 'vin' to the list of recognized query variables. * * @param array $vars An array of query variables. * @return array The expanded array of query variables */ public function add_query_vars( $vars ) { $vars[] = 'vin'; return $vars; } /** * Redirects the request to a vehicle permalink if a 'vin' query * variable is present. * * @return void */ public function redirect_vin_urls() { $vin = get_query_var( 'vin' ); if ( $vin ) { wp_safe_redirect( $this->find_vehicle_url( $vin ) ); exit; } } /** * Takes a VIN and finds its permalink. If the vehicle is not in * inventory, the vehicle archive URL is returned. * * @param string $vin A vehicle identification number. * @return string A vehicle permalink or the link to the vehicle archive. */ protected function find_vehicle_url( $vin ) { $posts = get_posts( array( 'post_type' => INVP::POST_TYPE, 'post_status' => 'publish', 'meta_key' => apply_filters( 'invp_prefix_meta_key', 'vin' ), 'meta_value' => $vin, ) ); if ( 1 === count( $posts ) ) { return get_permalink( $posts[0] ); } return get_post_type_archive_link( INVP::POST_TYPE ); } }
Expand full source codeCollapse full source codeView on Github
Methods Methods
- add_hooks — Adds hooks that power the URL redirects.
- add_query_vars — Adds ‘vin’ to the list of recognized query variables.
- add_vin_rewrite_rule — Adds a rewrite rule to redirect URLs like https://demo.inventorypresser.com/vin/JM1NB354940406328/
- find_vehicle_url — Takes a VIN and finds its permalink. If the vehicle is not in inventory, the vehicle archive URL is returned.
- redirect_vin_urls — Redirects the request to a vehicle permalink if a ‘vin’ query variable is present.