Как отобразить название категории в записи при использовании WP Blog and Widget?

20 апр. 2020 г., 14:53:54
Просмотры: 10.6K
Голосов: 0

Я использую бесплатную версию плагина WP Blog and Widget для своего блога. Он работает отлично.

Моя проблема заключается в том, что мне нужно отобразить название категории текущей записи на странице отдельной записи. Я попробовал следующий код в файле single.php, чтобы проверить название категории:

$cat = get_the_category();
print_r($cat);

Но я не получаю название категории. Я получаю пустой массив:

Array ( )

Как я могу решить эту проблему?

Single.php

<?php
    /**
     * Шаблон для отображения всех отдельных записей
     *
     * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
     *
     * @package WordPress
     * @subpackage Twenty_Nineteen
     * @since 1.0.0
     */

    get_header();
?>

<section id="primary" class="content-area">
    <main id="main" class="site-main">

        <?php
            /* Начало цикла */
            while ( have_posts() ) :
                the_post();

            $cats = array();
            foreach (get_the_category($post_id) as $c) {
                $cat = get_category($c);
                array_push($cats, $cat->name);
            }

            if (sizeOf($cats) > 0) {
                $post_categories = implode(', ', $cats);
            } else {
                $post_categories = 'Не назначено';
            }
            echo $post_categories;


            get_template_part( 'template-parts/content/content', 'single' );

            if ( is_singular( 'attachment' ) ) {
                // Навигация по родительской записи
                the_post_navigation(
                    array(
                        /* переводчики: %s: ссылка на родительскую запись */
                        'prev_text' => sprintf( __( '<span class="meta-nav">Опубликовано в</span><span class="post-title">%s</span>', 'twentynineteen' ), '%title' ),
                    )
                );
            } elseif ( is_singular( 'post' ) ) {
                // Навигация по предыдущей/следующей записи
                the_post_navigation(
                    array(
                        'next_text' => '<span class="meta-nav" aria-hidden="true">' . __( 'Следующая запись', 'twentynineteen' ) . '</span> ' .
                            '<span class="screen-reader-text">' . __( 'Следующая запись:', 'twentynineteen' ) . '</span> <br/>' .
                            '<span class="post-title">%title</span>',
                        'prev_text' => '<span class="meta-nav" aria-hidden="true">' . __( 'Предыдущая запись', 'twentynineteen' ) . '</span> ' .
                            '<span class="screen-reader-text">' . __( 'Предыдущая запись:', 'twentynineteen' ) . '</span> <br/>' .
                            '<span class="post-title">%title</span>',
                    )
                );
            }

            // Если комментарии открыты или есть хотя бы один комментарий, загружаем шаблон комментариев
            if ( comments_open() || get_comments_number() ) {
                comments_template();
            }

            endwhile; // Конец цикла
        ?>

        </main><!-- #main -->
    </section><!-- #primary -->

<?php
    get_footer();
12
Комментарии

Где вы выводите название категории? В цикле записей или вне цикла, например в виджете?

Atif Aqeel Atif Aqeel
20 апр. 2020 г. 15:01:14

@AtifAqeel, мне нужно вывести название категории на странице single.php.

Naren Verma Naren Verma
20 апр. 2020 г. 15:03:11

get_the_category() получает термины из таксономии category. Плагин, на который вы ссылаетесь, создает пользовательский тип записи, поэтому вы уверены, что он не создает отдельную таксономию для 'категорий блога'? Если ваша запись имеет термины пользовательской таксономии, вам нужно использовать get_the_terms(), а не get_the_category().

Jacob Peattie Jacob Peattie
20 апр. 2020 г. 15:24:33

@JacobPeattie, Позвольте мне попробовать ваш комментарий выше.

Naren Verma Naren Verma
20 апр. 2020 г. 15:27:49

@NarenVerma Имейте в виду, что если вы используете get_the_terms(), вам нужно указать название таксономии, которое мне неизвестно. Проверьте URL страницы редактирования этих категорий. Там должно быть указано название таксономии.

Jacob Peattie Jacob Peattie
20 апр. 2020 г. 15:28:57

@JacobPeattie, Я попробовал следующий код: $term_obj_list = get_the_terms( $post->ID, 'taxonomy' ); print_r($term_obj_list);

и получил вывод WP_Error Object ( [errors] => Array ( [invalid_taxonomy] => Array ( [0] => Invalid taxonomy. ) ) [error_data] => Array ( ) )

Naren Verma Naren Verma
20 апр. 2020 г. 15:31:39

Прочитайте мой предыдущий комментарий.

Jacob Peattie Jacob Peattie
20 апр. 2020 г. 15:32:52

@JacobPeattie, Да, я прочитал ваш первый комментарий. Плагин, который я использую, создает отдельную таксономию для 'категорий блога'.

Naren Verma Naren Verma
20 апр. 2020 г. 15:35:19

Прочитайте мой другой комментарий.

Jacob Peattie Jacob Peattie
20 апр. 2020 г. 15:38:14

@JacobPeattie, я понял вашу мысль taxonomy=blog-category, поэтому мне нужно использовать так $terms = get_the_terms( $post->ID , 'blog-category' ); foreach ( $terms as $term ) { echo $term->name; }

Naren Verma Naren Verma
20 апр. 2020 г. 15:40:41

Верно. Это работает?

Jacob Peattie Jacob Peattie
20 апр. 2020 г. 15:41:10

@JacobPeattie, я получил название своей категории. Спасибо за помощь.

Naren Verma Naren Verma
20 апр. 2020 г. 15:42:40
Показать остальные 7 комментариев
Все ответы на вопрос 1
14

Вы можете просто добавить этот код в ваш файл single.php

foreach((get_the_category()) as $category) 
{
    echo $category->cat_name . ' '; 
}
20 апр. 2020 г. 15:04:52
Комментарии

Спасибо за ответ, но я получаю только "Not Assigned"

Naren Verma Naren Verma
20 апр. 2020 г. 15:07:36

так вы назначили категорию?

Atif Aqeel Atif Aqeel
20 апр. 2020 г. 15:09:03

Да, у меня есть категория, и я уже назначил(а) ее.

Naren Verma Naren Verma
20 апр. 2020 г. 15:10:52

ты поместил код внутри цикла while?

Atif Aqeel Atif Aqeel
20 апр. 2020 г. 15:11:21

Да, я добавил внутри while ( have_posts() ) : Пожалуйста, проверь мой код. Я обновил его в вопросе.

Naren Verma Naren Verma
20 апр. 2020 г. 15:14:38

хорошо, дай мне while

Atif Aqeel Atif Aqeel
20 апр. 2020 г. 15:17:18

Я просто добавил ваш код внутри цикла while, а остальную часть кода взял из темы WordPress.

Naren Verma Naren Verma
20 апр. 2020 г. 15:18:47

Ваш код работает, если я отключаю плагин WP Blog and Widget. Но я не хочу его отключать, потому что все блоги созданы с его помощью

Naren Verma Naren Verma
20 апр. 2020 г. 15:21:39

Пожалуйста, объясните причину минуса.

Naren Verma Naren Verma
20 апр. 2020 г. 15:22:53

я обновил свой ответ и проверил, что этот код отлично работает внутри цикла single.php https://prnt.sc/s2rhwd

Atif Aqeel Atif Aqeel
20 апр. 2020 г. 15:23:44

кто поставил минус моему ответу?

Atif Aqeel Atif Aqeel
20 апр. 2020 г. 15:24:44

Я, потому что нет функциональной разницы между кодом в вашем ответе и оригинальным вопросом. Это не решит проблему.

Jacob Peattie Jacob Peattie
20 апр. 2020 г. 15:25:28

Он не сказал, что у него есть произвольный тип записи? Он получает записи из блога, а не из произвольного типа записи.

Atif Aqeel Atif Aqeel
20 апр. 2020 г. 15:28:17

Они используют произвольный тип записи. В своем вопросе они указали ссылку на плагин, который его добавил. Но это совершенно не важно, потому что даже если бы они использовали блог, ваш ответ неверен, так как он не меняет ничего существенного в коде.

Jacob Peattie Jacob Peattie
20 апр. 2020 г. 15:37:11
Показать остальные 9 комментариев