In functions.php
/**
* Strip the slug out of a hierarchical custom post type
*/
if ( !class_exists( 'State_Rewrites' ) ) :
class State_Rewrites {
private static $instance;
public $rules;
private function __construct() {
/* Don't do anything, needs to be initialized via instance() method */
}
public static function instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new State_Rewrites;
self::$instance->setup();
}
return self::$instance;
}
public function setup() {
add_action( 'init', array( $this, 'add_rewrites' ), 20 );
add_filter( 'request', array( $this, 'check_rewrite_conflicts' ) );
add_filter( 'merken_rewrite_rules', array( $this, 'strip_state_rules' ) );
add_filter( 'rewrite_rules_array', array( $this, 'inject_state_rules' ) );
}
public function add_rewrites() {
add_rewrite_tag( "%merken%", '(.+?)', "merken=" );
add_permastruct( 'merken', "%merken%", array(
'ep_mask' => EP_PERMALINK
) );
}
public function check_rewrite_conflicts( $qv ) {
if ( isset( $qv['merken'] ) ) {
if ( get_page_by_path( $qv['merken'] ) ) {
$qv = array( 'pagename' => $qv['merken'] );
}
}
return $qv;
}
public function strip_state_rules( $rules ) {
$this->rules = $rules;
# We no longer need the attachment rules, so strip them out
foreach ( $this->rules as $regex => $value ) {
if ( strpos( $value, 'attachment' ) )
unset( $this->rules[ $regex ] );
}
return array();
}
public function inject_state_rules( $rules ) {
# This is the first 'page' rule
$offset = array_search( '(.?.+?)/trackback/?$', array_keys( $rules ) );
$page_rules = array_slice( $rules, $offset, null, true );
$other_rules = array_slice( $rules, 0, $offset, true );
return array_merge( $other_rules, $this->rules, $page_rules );
}
}
State_Rewrites::instance();
endif;
meer info –> http://boyn.es/2013/09/28/stripping-slug-custom-post-types/
#CPT #custom post type #query #redirect #slug