Я пытаюсь изменить постоянную ссылку типа поста на страницах по умолчанию, я хотел бы добавить в конец «.php», например: home_url() . post_name . '.php'
Я не могу использовать страницу постоянных ссылок WordPress, потому что я использую ее уже так: /%category%/%postname%.php
и это не влияет на тип публикации страниц по умолчанию.
Итак, я сделал это следующим образом:
function wp_pages_permalink( $permalink, $post_id ) {
if ( empty( $post_id ) ) return $permalink;
$post = get_post( $post_id );
return home_url( $post->post_name . '.php' );
}
add_filter( 'page_link', 'wp_pages_permalink', 10, 2 );
Однако я получаю 404, когда я пытаюсь посетить страницу, и я уже сбросил правила перезаписи, посетив страницу постоянных ссылок.
Как и предполагалось, для этого требовалось правило перезаписи. Не знаю, почему фильтру post_link не нужно добавлять правило перезаписи.
function ba_rewrite() {
add_rewrite_rule('^([^/]*)?.php', 'index.php?pagename=$matches[1]', 'top');
}
add_action( 'init', 'ba_rewrite' );
Таким образом, вы просто меняете вывод ссылки
с адресом, который вы хотели бы
но фактическая страница не меняется;
Я считаю, что вы должны нацеливаться на $ permalink_structure вместо просто $ permalink,
попробуйте использовать что-то вроде:
function wp_pages_permalink( $permalink_structure, $post_id ) {
if ( empty( $post_id ) ) return $permalink_structure ;
$post = get_post( $post_id );
return ( $permalink_structure . '.php' );
}
add_filter( 'page_link', 'wp_pages_permalink', 10, 2 );
Я сделал изменения на основе вашего кода, поэтому вам, возможно, придется поработать над ним …
В любом случае, если вы хотите проверить, что происходит с постоянными ссылками, взгляните на документацию (WP_rewrite класс)
Попробуйте сделать эти шаги:
добавить расширение в постоянные ссылки (настройки-> постоянные ссылки)
-> Я использую этот формат: /%post_id%/%postname%.php
сохрани это
в ваших файлах WordPress перейдите в wp-includes -> rewrite.php и в строке 1148 замените эту строку кода
$ this-> page_structure = $ this-> root. ‘% ИмяСтраница%’;
с этим
$this->page_structure = $this->root . '%pagename%.php';