У меня есть пользовательская страница в шаблоне пользовательской страницы, которая должна содержать список сообщений пользователя, и это работает, но у меня есть запрос, который должен фильтровать между опубликованными и неопубликованными (черновыми) сообщениями. Кроме того, он должен иметь нумерацию страниц, поэтому он показывает только 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
мешает друг другу, но это последнее решение, которое я пробовал, и оно не работает.
Хорошо, чтобы ответить на мой собственный вопрос, если кто-то еще застрянет на чем-то подобном, это было действительно просто, я пропускал только $
в конце регулярного выражения, чтобы заставить его работать.
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');
Других решений пока нет …