WordPress — фильтр page_link

Я пытаюсь изменить постоянную ссылку типа поста на страницах по умолчанию, я хотел бы добавить в конец «.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, когда я пытаюсь посетить страницу, и я уже сбросил правила перезаписи, посетив страницу постоянных ссылок.

0

Решение

Как и предполагалось, для этого требовалось правило перезаписи. Не знаю, почему фильтру post_link не нужно добавлять правило перезаписи.

function ba_rewrite() {
add_rewrite_rule('^([^/]*)?.php', 'index.php?pagename=$matches[1]', 'top');
}

add_action( 'init', 'ba_rewrite' );
1

Другие решения

Таким образом, вы просто меняете вывод ссылки
с адресом, который вы хотели бы
но фактическая страница не меняется;

Я считаю, что вы должны нацеливаться на $ 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 класс)

0

Попробуйте сделать эти шаги:

  1. добавить расширение в постоянные ссылки (настройки-> постоянные ссылки)
    -> Я использую этот формат: /%post_id%/%postname%.php

  2. сохрани это

  3. в ваших файлах WordPress перейдите в wp-includes -> rewrite.php и в строке 1148 замените эту строку кода

    $ this-> page_structure = $ this-> root. ‘% ИмяСтраница%’;

с этим

$this->page_structure = $this->root . '%pagename%.php';
  1. сохраните его и попробуйте сейчас.
-2
По вопросам рекламы [email protected]