Intereting Posts
Показывать настраиваемое поле, если оно существует, и показывать разные элементы, если это не Проблема с изображением.php – изображения не отображаются в нем Попытка добавить класс для публикации ссылок Уведомить сайт WordPress, который я связал с ним Как показать только 1 сообщение из определенной категории на первой странице Как переименовать файл wp-config.php один раз под управлением версией? отображать определенный виджет на странице Как отключить или настроить панель администратора в фоновом режиме Получите wp-load.php PATH с wp_localize_script и JavaScript для плагина X-Pingback и XMLRPC Как получить идентификаторы категории, которые добавляются в главное меню? Одноуровневое меню? Другой путь? Функция для вызова одной должности или категории Дать дочерние категории одинаковый класс (родительская категория-slug) как родительский в списке меню? Безопасность WordPress

Улучшение персонализированной публикации Permalink Structure

Я создал персонализированный тип сообщения, с простой структурой постоянной ссылки. Теперь я хочу улучшить эту структуру permalink с некоторой дополнительной информацией.

public function custom_post_mission() { $labels = array( ... ); $args = array( 'labels' => $labels, 'description' => __( 'Holds our missions and specific data', TEXT_DOMAIN ), 'public' => true, 'menu_position' => 5, 'supports' => array( 'title', 'author', 'editor' ), 'has_archive' => true, 'menu_icon' => plugin_dir_url( __FILE__ ).'img/mission.png', 'register_meta_box_cb' => array( $this, 'add_custom_box' ) ); register_post_type( 'mission', $args ); } 

С приведенным выше кодом я получил следующую структуру permalink: http://localhost/wordpress/mission/<post-title>/

Я хотел бы улучшить эту структуру следующим образом: http://localhost/wordpress/mission/<year>/<month>/<post-title>/

Как я могу это сделать? Было бы неплохо, если бы был способ перенести старую структуру постоянной ссылки на новую, но это не обязательно.

BR & Спасибо,

mybecks

/ E: улучшил мой код с помощью примера кода, предоставленного ravi

 public function custom_post_mission() { global $wp_rewrite; $labels = array( ... ); $args = array( 'labels' => $labels, 'description' => __( 'Holds our missions and specific data', TEXT_DOMAIN ), 'public' => true, 'menu_position' => 5, 'supports' => array( 'title', 'author', 'editor' ), 'has_archive' => true, 'menu_icon' => plugin_dir_url( __FILE__ ).'img/mission.png', 'register_meta_box_cb' => array( $this, 'add_custom_box' ) ); register_post_type( 'mission', $args ); $wp_rewrite->add_permastruct('mission', 'mission/%year%/%monthnum%/%mission%/', true, 1); add_rewrite_rule('mission/([0-9]{4})/(.+)/?$', 'index.php?mission=$matches[2]', 'top'); $wp_rewrite->flush_rules(); // !!! } 

Это создает следующую структуру константной ссылки:

 http://localhost/wordpress/mission/%year%/%monthnum%/<mission-title>/ 

Но заполнители %monthnum% и %monthnum% не могут быть заменены соответствующими значениями.

/ E2: Наконец-то я заработал. Мне нужен фильтр, который разрешает заполнители:

 add_filter('post_type_link', 'mission_permalink', 10, 3); function mission_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 md 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); // wp_die($permalink ); } else { // if they're not using the fancy permalink option } return $permalink; } 

и я был небольшой ошибкой в ​​add_rewrite_rule regexp. Правильный: add_rewrite_rule('mission/([0-9]{4})/([0-9]{2})/(.+)/?$', 'index.php?mission=$matches[3]', 'top');

Solutions Collecting From Web of "Улучшение персонализированной публикации Permalink Structure"