@Chaly95

Почему не работает пагинация для произвольных типов записи, Worpdress?

Не могу разобраться почему не работает пагинация для произвольного типа записи.
Тип записи создавал при помощи такого кода

add_action('init', 'register_recipes_post_type');
function register_recipes_post_type()
{


    // тип записи - Рецепт - recipes
    register_post_type('recipes', array(
        'label' => 'Рецепты',
        'labels' => array(
            'name' => 'Рецепты',
            'singular_name' => 'Рецепт',
            'menu_name' => 'Рецепты',
            'all_items' => 'Все Рецепты',
            'add_new' => 'Добавить Рецепт',
            'add_new_item' => 'Добавить новый Рецепт',
            'edit' => 'Редактировать',
            'edit_item' => 'Редактировать Рецепт',
            'new_item' => 'Новый Рецепт',
        ),
        'description' => '',
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_rest' => false,
        'rest_base' => '',
        'show_in_menu' => true,
        'exclude_from_search' => false,
        'capability_type' => 'post',
        'map_meta_cap' => true,
        'hierarchical' => false, //recipes/%recipescat%
        'rewrite' => array('slug' => 'recipes', 'with_front' => false, 'pages' => false, 'feeds' => false, 'feed' => false),
        'has_archive' => 'recipes',
        'query_var' => true,
        'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
//		'taxonomies'          => array( 'recipescat' ),
    ));

}

## Отфильтруем ЧПУ произвольного типа
// фильтр: apply_filters( 'post_type_link', $post_link, $post, $leavename, $sample );
add_filter('post_type_link', 'recipes_permalink', 1, 2);
function recipes_permalink($permalink, $post)
{
    // выходим если это не наш тип записи: без холдера %shops%
    if (strpos($permalink, '%recipescat%') === false)
        return $permalink;

    // Получаем элементы таксы
    $terms = get_the_terms($post, 'recipescat');
    // если есть элемент заменим холдер
    if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
        $term_slug = array_pop($terms)->slug;
    // элемента нет, а должен быть...
    else
        $term_slug = 'no-recipescat';

    return str_replace('%recipescat%', $term_slug, $permalink);
}


При попытке перейти на 2 страницу выдает ошибку "Oops! That page can’t be found.
It looks like nothing was found at this location. Maybe try one of the links below or a search?"
https://new.snails-house.com/recipes/page/2/

Буду благодарен за любую помощь!)
  • Вопрос задан
  • 196 просмотров
Решения вопроса 1
@Chaly95 Автор вопроса
Ответ нашел на другом сайте мне помогло

Тоже столкнулся с данной проблемой и решение оказалось гораздо проще. При создании произвольного типа записи нужно разрешить пагинацию. По ключю 'rewrite' у меня значение 'pages' стояло в false и при переходе на site.ru/courses/page/2 выдавало 404 страницу. Исправил на true, обновил настройку постоянных ссылок в админке и все заработало.


$courses = array(
  /***/
  'capability_type' => 'post',
  'rewrite' => array(
    'slug'       => 'courses/%coursescat%',
    'with_front' => false,
    'pages'      => true,
    'feeds'      => false,
    'feed'       => false
  ),
  'has_archive' => 'courses',
  /****/
);

register_post_type( 'courses', $courses );
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы