要获得所需内容,必须添加自定义重写规则并过滤永久链接结构。以下代码同时执行以下操作:
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: Event Permalinks
*/
// Not a WordPress context? Stop.
! defined( \'ABSPATH\' ) and exit;
// Wait until all needed functions are loaded.
add_action( \'init\', array ( \'Bradys_Events\', \'init\' ) );
class Bradys_Events
{
/**
* Creates a new instance.
*
* @wp-hook init
* @see __construct()
* @return void
*/
public static function init()
{
new self;
}
/**
* Constructor
*/
public function __construct()
{
$args = array(
\'label\' => \'events\',
\'public\' => true,
\'hierarchical\' => false,
\'has_archive\' => true,
\'rewrite\' => array(
\'with_front\' => false,
\'slug\' => "news/events"
),
\'supports\' => array( \'title\', \'editor\', \'thumbnail\' )
);
register_post_type("events", $args);
// Prevent WordPress from sending a 404 for our new perma structure.
add_rewrite_rule(
\'^news/events/(\\d+)/[^/]+/?$\',
\'index.php?post_type=events&p=$matches[1]\',
\'top\'
);
// Inject our custom structure.
add_filter( \'post_type_link\', array ( $this, \'fix_permalink\' ), 1, 2 );
}
/**
* Filter permalink construction.
*
* @wp-hook post_type_link
* @param string $post_link default link.
* @param int $id Post ID
* @return string
*/
public function fix_permalink( $post_link, $id = 0 )
{
$post = &get_post($id);
if ( is_wp_error($post) || $post->post_type != \'events\' )
{
return $post_link;
}
// preview
empty ( $post->slug )
and $post->slug = sanitize_title_with_dashes( $post->post_title );
return home_url(
user_trailingslashit( "news/events/$post->ID/$post->slug" )
);
}
}
访问
wp-admin/options-permalink.php
一次让WordPress更新其重写规则。