Отображение и регистрация пользовательских категорий для пользовательских типов записей

Вопрос или проблема

Хорошо, поехали. У меня есть 2 разных пользовательских типа записей. Первый называется ‘портфолио’, второй ‘игры’.

Все обзоры игр, которые я пишу, являются записями типа ‘игры’. Для лучшего обзора я создал пользовательские категории, такие как обзоры, playstation, xbox и т. д. К сожалению, каждый раз, когда я хочу отобразить записи одной категории (http://www.zock-around-the-clock.com/games_category/testcategory), я получаю страницу с ошибкой 404.

Я не особо использую записи ‘портфолио’, но с ними распределение по категориям работало бы прекрасно. (http://www.zock-around-the-clock.com/portfolio-view/testcategory).

Я хотел бы спросить вас, в чем разница между этими двумя типами и почему это работает с записями портфолио, но не работает с записями игр.

Я также пытался добавить обычные категории в записи игр, добавив 'taxonomies' => array('category'),, но, к сожалению, все еще невозможно отобразить записи игр отдельной категории.

Вот single-portfolio.php

<?php get_header(); ?>

<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<?php
  $custom = get_post_custom($post->ID);
  $lightbox = $custom["lightbox-url"][0];
?>
<div id="post-<?php the_ID(); ?>" <?php post_class('post'); ?>>
  <article class="single-post">
    <header>
      <h1 class="entry-title"><?php the_title(); ?></h1>
    </header>
    <div class="post-content wrapper">
   <?php if(has_post_thumbnail()) {
                echo '<div class="featured-thumbnail no-hover"><div class="img-wrap">'; the_post_thumbnail(''); echo '</div></div>';
                }
            ?>
      <?php the_content(); ?>
      <?php wp_link_pages('before=<div class="pagination">&after=</div>'); ?>
    </div><!--.post-content-->
  </article>
</div><!-- #post-## -->

<?php comments_template( '', true ); ?>

и init. для записей портфолио:

function my_post_type_portfolio() {
register_post_type( 'portfolio',
            array( 
            'label' => __('Портфолио'), 
            'singular_label' => __('Элемент портфолио', 'theme1575'),
            '_builtin' => false,
            'public' => true, 
            'show_ui' => true,
            'show_in_nav_menus' => true,
            'hierarchical' => true,
            'capability_type' => 'page',
            'menu_icon' => get_template_directory_uri() . '/includes/images/icon_portfolio.png',
            'rewrite' => array(
                'slug' => 'portfolio-view',
                'with_front' => FALSE,
            ),
            'supports' => array(
                    'title',
                    'editor',
                    'thumbnail',
                    'excerpt',
                    'custom-fields',
                    'comments')
                ) 
            );
register_taxonomy('portfolio_category', 'portfolio', array('hierarchical' => true, 'label' => 'Категории портфолио', 'singular_name' => 'Категория', "rewrite" => true, "query_var" => true));}add_action('init', 'my_post_type_portfolio');

Вот single-games.php

<?php get_header(); ?><div id="content" class="grid_8 <?php if (of_get_option('blog_sidebar_pos') == "right" ) {echo "alpha";} else {echo "omega";} ?> <?php echo of_get_option('blog_sidebar_pos') ?>">
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<div id="post-<?php the_ID(); ?>" <?php post_class('post'); ?>>
  <article class="single-post">
    <div class="post-header">
        <h2 class="entry-title"><a href="https://wordpress.stackexchange.com/questions/135899/<?php the_permalink() ?>" title="<?php the_title(); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
        <?php $post_meta = of_get_option('post_meta'); ?>
        <?php if ($post_meta=='true' || $post_meta=='') { ?>
            <div class="post-meta">
                <?php _e('Опубликовано', 'theme1575'); ?> <span class="date updated"><?php the_time('j. F, Y'); ?></span> <i><?php _e('от', 'theme1575'); ?> <span class="vcard author"> <span class="fn"><?php the_author_posts_link() ?></span> </span></i>
            </div><!--.post-meta-->
        <?php } ?>      
    </div>
    <div class="post-content wrapper">
    <?php if(has_post_thumbnail()) {
                echo '<div class="featured-thumbnail no-hover"><div class="img-wrap">'; the_post_thumbnail(''); echo '</div></div>';
                }
            ?>
      <?php the_content(); ?><?php wp_link_pages('before=<div class="pagination">&after=</div>'); ?>
    </div><!--.post-content-->
  </article>

        <?php /* Если пользователь заполнил информацию о себе, она включается здесь */ ?>
  <div id="post-author">
    <h3><?php _e('Автор', 'theme1575'); ?> <?php the_author_posts_link() ?></h3>
    <p class="gravatar"><?php if(function_exists('get_avatar')) { echo get_avatar( get_the_author_email(), '80' ); /* Этот аватар - это gravatar пользователя (http://gravatar.com) на основе его административного адреса электронной почты */  } ?></p>
    <div id="author-description">
      <?php the_author_meta('description') ?> 
      <div id="author-link">
        <p><?php _e('Просмотреть все записи от:', 'theme1575'); ?> <?php the_author_posts_link() ?></p>
      </div><!--#author-link-->
    </div><!--#author-description -->
  </div><!--#post-author-->

</div><!-- #post-## -->

<nav class="oldernewer">
  <div class="older">
    <?php previous_post_link('%link', __('&laquo; Предыдущая запись', 'theme1575')) ?>
  </div><!--.older-->
  <div class="newer">
    <?php next_post_link('%link', __('Следующая запись &raquo;', 'theme1575')) ?>
  </div><!--.newer-->
</nav><!--.oldernewer-->

и init. для записей игр:

function my_post_type_games() {
register_post_type( 'games',
            array( 
            'label' => __('Игры'), 
            'taxonomies' => array('category'),
            'public' => true, 
            'query_var'=> true, 
            'publicly_queryable'=> true,
            'show_ui' => true,
            'show_in_nav_menus' => false,
            'menu_position' => 5,
            'rewrite' => array(
                'slug' => 'games-view',
                'with_front' => true,
                'hierarchical' => true,
            ),
            'has_archive' => true,
            'supports' => array(
                    'title',
                    'author',
                    'thumbnail',
                    'revisions',
                    'comments',
                    'editor',
                    'excerpt')
                ) 
            ); register_taxonomy('games_category', 'games', array('hierarchical' => true, 'label' => 'Категории игр', 'singular_name' => 'Категория', "rewrite" => true, "query_var" => true)); } add_action('init', 'my_post_type_games');?>

Установите hierarchical=false (в типе записи), если у вас WordPress > 3.6. Я думаю, что есть ошибка, которая мешает таксономиям работать корректно, я использовал этот трюк на своем CPT / пользовательской таксономии, и это работает нормально.

Вам просто нужно создать taxonomy-testcategory.php в вашем каталоге темы и сбросить ваши постоянные ссылки.

.

Ответ или решение

Регистрация и отображение пользовательских категорий для пользовательских типов записей в WordPress

Когда речь идет о создании и управлении пользовательскими типами записей в WordPress, важно правильно настроить их так, чтобы они работали согласно заявленным требованиям. В вашем случае у вас имеется два пользовательских типа записей: «portfolio» и «games». Проблема с отображением категорий для типа записи «games» может быть связана как с неправильной настройкой самого пользовательского типа записи, так и с отсутствием необходимой кастомизации URL.

Разработка и регистрация пользовательских типов записей и таксономий

1. Настройка типа записи «games»

В вашем коде для регистрации пользовательского типа записи «games» вы добавили возможность использовать стандартную таксономию «category», но не учли некоторые важные аспекты. Обратите внимание, что параметры, такие как 'has_archive' и 'publicly_queryable', должны быть установлены в true, чтобы обеспечить доступ к архивам записей. Кроме того, вы можете использовать вашу кастомную таксономию «games_category», если она должным образом зарегистрирована.

Пример кода для корректной регистрации:

function my_post_type_games() {
    register_post_type('games', array(
        'label' => __('Games'),
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'has_archive' => true,
        'rewrite' => array(
            'slug' => 'games-view',
            'with_front' => true,
        ),
        'supports' => array(
            'title',
            'editor',
            'thumbnail',
            'comments',
            'excerpt',
        ),
        'taxonomies' => array('category', 'games_category'), // Позволяет использовать как стандартную категорию, так и кастомные
    ));

    register_taxonomy('games_category', 'games', array(
        'hierarchical' => true,
        'label' => 'Games Categories',
        'rewrite' => true,
        'query_var' => true,
    ));
}

add_action('init', 'my_post_type_games');
2. Создание пользовательской таксономии

Если вы хотите использовать свои особенности для категории игр, вы можете оставить вашу кастомную таксономию «games_category». Убедитесь, что вы зарегистрировали её правильно.

Ошибка 404 при доступе к категориям

Ошибка 404 при попытке доступа к адресу, например, http://www.zock-around-the-clock.com/games_category/testcategory, может быть вызвана несколькими причинами:

  1. Необновленные постоянные ссылки: После создания или обновления пользовательских типов и таксономий, рекомендуется перейти в раздел «Настройки» -> «Постоянные ссылки» и просто нажать «Сохранить изменения», чтобы сбросить правила перезаписи.

  2. Отсутствие шаблона для таксономии: Вам нужно создать файл taxonomy-games_category.php в папке вашей темы. Этот файл отвечает за отображение записей для вашей кастомной таксономии. Например, вы можете использовать следующий минималистичный код для начала:

<?php get_header(); ?>

<div class="games-category">
    <h1><?php single_term_title(); ?></h1>

    <?php if (have_posts()) : ?>
        <ul>
            <?php while (have_posts()) : the_post(); ?>
                <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
            <?php endwhile; ?>
        </ul>
    <?php else : ?>
        <p><?php _e('Записей не найдено.', 'text-domain'); ?></p>
    <?php endif; ?>
</div>

<?php get_footer(); ?>

Основные отличия между двумя типами записей

  1. Регистрация: Тип записи «portfolio» использует специальную таксономию, что может быть настроено более детально. Вы используете кастомные параметры, такие как hierarchical, что позволяет организовывать категории в иерархию.

  2. Настройки URL и перезапись: Убедитесь, что реферальные адреса для обоих типов заказаны так, чтобы избегать путаницы. Например, если в пользовательском типе «portfolio» задан другой слог, это может повлиять на настройки для «games».

Рекомендации по улучшению оптимизации

  1. Убедитесь, что используете правильные мета-теги и структуры заголовков для изображений, чтобы улучшить SEO.
  2. Регулярно проверяйте статус и работоспособность ваших категорий и постов. Используйте плагины для SEO-оптимизации, чтобы следить за качеством контента на сайте.

Примите во внимание указанные рекомендации, чтобы избежать возникновения ошибок и обеспечить правильное отображение пользовательских категорий для ваших типов записей в WordPress.

Оцените материал
Добавить комментарий

Капча загружается...