WordPress 3.0.1
Тема: своя дочерняя от hybrid, но пробовал и на стандартной
Создал свой Post Type под названием "playmod".
Хочу изменить чпу URL. Сколько ни пробовал экспериментировать, работает только вариант
/playmod/%postname%/
Если попытаться добавить что либо перед %postname%, появляется 404 страница, например:
/playmod/%year%/%postname%/ /playmod/%category%/%postname%/
Скорее всего это происходит из-за моих кривых рук.
Помогите разобраться
add_action( 'init', 'create_my_post_type', 0 );
function create_my_post_type() {
register_my_post_type_playmod();
}
/*
* Регистрируем тип контента playmod
*/
function register_my_post_type_playmod() {
// описываем наш тип контента
$args = array(
'labels' => array(
'name' => __('Playmod'),
),
'public' => true,
'show_ui' => true, // отображать ли интерфейс в админке
'_builtin' => false, // это не встроенный тип данных
'_edit_link' => 'post.php?post=%d',
'capability_type' => 'post', //с каким типом контента совместимы посты нашего типа (здесь с обычными постами)
'hierarchical' => false, //страничный это тип или постовый (иерархический или нет)
#'rewrite' => array("slug" => "pl", 'with_front' => false), // формат ссылок
'query_var' => true, //можно задать query_var. К примеру для постов она p, типа [domain]/?p=3
'supports' => array('title', 'editor', 'thumbnail', 'custom-fields', 'excerpt', 'comments'),
'taxonomies' => array('category'),
);
register_post_type( 'playmod' , $args );
// сбрасываем правила
flush_rewrite_rules();
// меняем URL
add_action('init', 'my_rewrite');
function my_rewrite() {
global $wp_rewrite;
//$wp_rewrite->flush_rules();
//$url_structure = '/playmod/%postname%/';
//$url_structure = '/playmod/%category%/%postname%/';
$url_structure = '/playmod/%year%/%postname%/';
$wp_rewrite->add_permastruct('playmod', $url_structure, false);
}
// Add filter to plugin init function
add_filter('post_type_link', 'my_permalink', 10, 3);
// Adapted from get_permalink function in wp-includes/link-template.php
function my_permalink($permalink, $post_id, $leavename) {
$post = get_post($post_id);
$rewritecode = array(
'%year%',
'%monthnum%',
'%day%',
'%hour%',
'%minute%',
'%second%',
$leavename? '' : '%postname%',
'%post_id%',
'%category%',
'%author%',
$leavename? '' : '%pagename%',
);
if ( '' != $permalink && !in_array($post->post_status, array('draft', 'pending', 'auto-draft')) ) {
$unixtime = strtotime($post->post_date);
$category = '';
if ( strpos($permalink, '%category%') !== false ) {
$cats = get_the_category($post->ID);
if ( $cats ) {
usort($cats, '_usort_terms_by_ID'); // order by ID
$category = $cats[0]->slug;
if ( $parent = $cats[0]->parent )
$category = get_category_parents($parent, false, '/', true) . $category;
}
// show default category in permalinks, without
// having to assign it explicitly
if ( empty($category) ) {
$default_category = get_category( get_option( 'default_category' ) );
$category = is_wp_error( $default_category ) ? '' : $default_category->slug;
}
}
$author = '';
if ( strpos($permalink, '%author%') !== false ) {
$authordata = get_userdata($post->post_author);
$author = $authordata->user_nicename;
}
$date = explode(" ",date('Y m d H i s', $unixtime));
$rewritereplace =
array(
$date[0],
$date[1],
$date[2],
$date[3],
$date[4],
$date[5],
$post->post_name,
$post->ID,
$category,
$author,
$post->post_name,
);
$permalink = str_replace($rewritecode, $rewritereplace, $permalink);
} else { // if they're not using the fancy permalink option
}
return $permalink;
}
}