Правила разбиения на страницы и переписывания делают проблемы в WordPress

У меня есть пользовательская страница в шаблоне пользовательской страницы, которая должна содержать список сообщений пользователя, и это работает, но у меня есть запрос, который должен фильтровать между опубликованными и неопубликованными (черновыми) сообщениями. Кроме того, он должен иметь нумерацию страниц, поэтому он показывает только 10 сообщений на странице.

Проблема существует, когда я хочу перечислить все сообщения и перейти на вторую страницу.

Чтобы иметь возможность просматривать по фильтрам и иметь нумерацию страниц, я сделал пользовательскую переписку, и она работает, но без фильтров нумерация страниц дает только первую страницу.

Чтобы лучше понять, как это работает.

mywebsite.com/my-posts/ <—- это работает

mywebsite.com/my-posts/published/ <—- это работает

mywebsite.com/my-posts/published/page/2 <—- это работает

mywebsite.com/my-posts/page/2 <—- это НЕ работает

И без довольно постоянных структур это так

mywebsite.com/?page_id=23

mywebsite.com/?page_id=23&filter=published

mywebsite.com/?page_id=23&filter=published&paged=2

mywebsite.com/?page_id=23&paged=2

Теперь, если я не использую красивые постоянные ссылки, это работает, но что-то мне не хватает с переписать, и я не могу понять это.

function custom_rewrite_rule() {
add_rewrite_tag('%filter%', '([^&]+)');

// add_rewrite_rule(get_post_field( 'post_name', get_theme_option('user_link') ) . '/([^/]+)/page/([0-9]{1,})/?','index.php?page_id='. get_theme_option('user_link') .'&user=$matches[1]&paged=$matches[2]','top');
// add_rewrite_rule(get_post_field( 'post_name', get_theme_option('user_link') ) . '/([^/]+)/?','index.php?page_id='. get_theme_option('user_link') .'&user=$matches[1]','top');
// add_rewrite_tag('%user%', '([^&]+)');

add_rewrite_rule(get_post_field( 'post_name', get_theme_option('myprofile_page') ) . '/([^/]+)/?','index.php?page_id='. get_theme_option('myprofile_page') .'&filter=$matches[1]','top');
add_rewrite_rule(get_post_field( 'post_name', get_theme_option('myprofile_page') ) . '/([^/]+)/page/([0-9]{1,})/?','index.php?page_id='. get_theme_option('myprofile_page') .'&filter=$matches[1]&paged=$matches[2]','bottom');
add_rewrite_rule(get_post_field( 'post_name', get_theme_option('myprofile_page') ) . '/page/([0-9]{1,})/?','index.php?page_id='. get_theme_option('myprofile_page') .'&paged=$matches[1]','bottom');
}
add_action('init', 'custom_rewrite_rule', 10, 0);

function custom_query_vars( $vars ) {
array_push($vars, 'filter');
return $vars;
}
add_filter( 'query_vars', 'custom_query_vars' );

Я знаю это paged с filter мешает друг другу, но это последнее решение, которое я пробовал, и оно не работает.

0

Решение

Хорошо, чтобы ответить на мой собственный вопрос, если кто-то еще застрянет на чем-то подобном, это было действительно просто, я пропускал только $ в конце регулярного выражения, чтобы заставить его работать.

add_rewrite_rule( get_post_field( 'post_name', get_theme_option('myprofile_page') ) . '/([^/]+)/?$', 'index.php?page_id='. get_theme_option('myprofile_page') .'&filter=$matches[1]','top');
add_rewrite_rule( get_post_field( 'post_name', get_theme_option('myprofile_page') ) . '/([^/]+)/page/?([0-9]{1,})/?$', 'index.php?page_id='. get_theme_option('myprofile_page') .'&filter=$matches[1]&paged=$matches[2]','top');
0

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

Других решений пока нет …