Intereting Posts
Как не загружать таблицу стилей и как загрузить вторую таблицу стилей на странице Как правильно изменить шаблон плагина (view)? WordPress Media Library – Используемое пространство загрузки wordpress wp_enqueue_script () не работает WordPress и nginx, загрузите несколько страниц вместо того, чтобы их обслуживать Категория пользовательских сообщений Текущие и следующие сообщения месяца Пользовательский URL-адрес регистрации теряется, когда пользователь делает ошибку регистрации Как заменить «Имя пользователя» в форме входа в WordPress? Пользовательский тип сообщения постоянная ссылка показывает неправильную страницу: homepage / index.php Есть ли способ удалить всплывающую подсказку плагина через пользовательский CSS? Форма ввода, представляющая 2 внешних API Получение переменной из базы данных Wp3.5 Media Gallery Редактировать модальный: изменить титры на заголовок Изменение сжатия JPEG в зависимости от размера изображения

Последние комментарии от конкретного виджета категории

Я пытаюсь создать виджет боковой панели для отображения последних комментариев из определенной категории. У меня возникают трудности с определением того, как WordPress знает, из каких категорий есть комментарии.

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

Я основываю виджет на Widget_Recent_Comments (найденный из wp-includes/default-widgets.php ). Вот что я до сих пор. Я считаю, что выход контролируется в этой области:

  $output = ''; $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Recent Comments' ) : $instance['title'], $instance, $this->id_base ); if ( empty( $instance['number'] ) || ! $number = absint( $instance['number'] ) ) $number = 5; $category_name = empty( $instance['category_name'] ) ? '' : $instance['category_name']; $comments = get_comments( apply_filters( 'widget_comments_args', array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish' ) ) ); $output .= $before_widget; if ( $title ) $output .= $before_title . $title . $after_title; $output .= '<ul id="recentcomments">'; if ( $comments ) { foreach ( (array) $comments as $comment) { $output .= '<li class="recentcomments">' . /* translators: comments widget: 1: comment author, 2: post link */ sprintf(_x('%1$s on %2$s', 'widgets'), get_comment_author_link(), '<a href="' . esc_url( get_comment_link($comment->comment_ID) ) . '">' . get_the_title($comment->comment_post_ID) . '</a>') . '</li>'; } } $output .= '</ul>'; $output .= $after_widget; echo $output; 

И вот полные коды: http://pastebin.com/VH666jty

В основном мои виджеты похожи на виджет по умолчанию «Последние комментарии». Только то, что у него есть необязательный просмотр Display comments only from category/categories: ... , где пользователь может сам вводить.

Если оставить его пустым, будут отображаться комментарии из любой категории, а при добавлении некоторой категории slug, разделенной запятой (например: mycategory,othercategory ), будут отображаться комментарии только из выбранных категорий.

Solutions Collecting From Web of "Последние комментарии от конкретного виджета категории"

Вы можете получить ответ от блога Kovshenin

Замените целое if ( $comments ) на это

 if ( $comments ) { foreach ( (array) $comments as $comment) { $comm_post_id = $comment->comment_post_ID; if ( $category_name ) { if (!in_category( "{$category_name}", $comm_post_id )) { continue; } } $output .= '<li class="recentcomments">' . /* translators: comments widget: 1: comment author, 2: post link */ sprintf(_x('%1$s on %2$s', 'widgets'), get_comment_author_link(), '<a href="' . esc_url( get_comment_link($comment->comment_ID) ) . '">' . get_the_title($comment->comment_post_ID) . '</a>') . '</li>'; } } 

Вы можете использовать hook_clauses для настройки запроса комментария

Замените часть «join» на

 INNER JOIN $wpdb->posts ON($wpdb->posts.ID = $wpdb->comments.comment_post_ID) INNER JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON($wpdb->term_taxonomy.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id) INNER JOIN $wpdb->terms ON($wpdb->terms.term_id = $wpdb->term_taxonomy.term_id) 

В части «где» добавьте предложение на основе пользовательского ввода, например. AND $wpdb->terms.slug = 'uncategorized'

Сделайте запрос add_filter непосредственно перед функцией remove_filter немедленно используйте вызов remove_filter чтобы не изменять любые другие запросы на странице