Как я могу исключить одну категорию из этого цикла, когда я перечисляю проекты своего типа по годам?
<?php foreach(posts_by_year() as $year => $posts) : ?> <h3><?php echo $year; ?></h3> <ul> <?php foreach($posts as $post) : setup_postdata($post); ?> <li> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> </li> <?php endforeach; ?> <div class="et_pb_column et_pb_column_4_4"><hr class="et_pb_space et_pb_divider"style="border-color: #f7f7f9;"></div> </ul> <?php endforeach; ?>
обновление, функция:
function posts_by_year() { // array to use for results $years = array(); // get posts from WP $posts = get_posts(array( 'numberposts' => -1, 'orderby' => 'post_date', 'order' => 'ASC', 'post_type' => 'project', 'post_status' => 'publish', 'category' => -27 )); // loop through posts, populating $years arrays foreach($posts as $post) { $years[date('Y', strtotime($post->post_date))][] = $post; } // reverse sort by year krsort($years); return $years; }
Я считаю, что вы используете следующий код из этой ссылки pastebin
function posts_by_year() { // array to use for results $years = array(); // get posts from WP $posts = get_posts(array( 'numberposts' => -1, 'orderby' => 'post_date', 'order' => 'ASC', 'post_type' => 'my-custom-post-type', 'post_status' => 'publish' )); // loop through posts, populating $years arrays foreach($posts as $post) { $years[date('Y', strtotime($post->post_date))][] = $post; } // reverse sort by year krsort($years); return $years; }
Эта функция использует get_posts
для возврата списка сообщений. Чтобы исключить категорию, вы можете передать параметр category
в свои аргументы. Всего одна заметка
Примечание. Параметром категории должен быть идентификатор категории, а не название категории.
Примечание. Параметр категории может быть разделенным запятыми списком категорий, так как
get_posts()
передает параметр «category» непосредственно вWP_Query
какcat
.
РЕДАКТИРОВАТЬ
Обратите внимание, что для исключения категории вам необходимо использовать знак минуса ( -
) перед идентификатором категории. Что-то вроде этого. Просто измените -13
на -ID
где ID – это идентификатор категории, которую вы хотите исключить
function posts_by_year() { // array to use for results $years = array(); // get posts from WP $posts = get_posts(array( 'numberposts' => -1, 'orderby' => 'post_date', 'order' => 'ASC', 'post_type' => 'my-custom-post-type', 'post_status' => 'publish', 'category' => -13 )); // loop through posts, populating $years arrays foreach($posts as $post) { $years[date('Y', strtotime($post->post_date))][] = $post; } // reverse sort by year krsort($years); return $years; }
EDIT 2
Скопируйте и вставьте этот код как есть. У вас была синтаксическая ошибка, поэтому вы получили пустую страницу
function posts_by_year() { // array to use for results $years = array(); // get posts from WP $posts = get_posts(array( 'numberposts' => -1, 'orderby' => 'post_date', 'order' => 'ASC', 'post_type' => 'project', 'post_status' => 'publish', 'category' => -27 )); // loop through posts, populating $years arrays foreach($posts as $post) { $years[date('Y', strtotime($post->post_date))][] = $post; } // reverse sort by year krsort($years); return $years; }
ИЗМЕНИТЬ 3
Кажется, что вы используете обычную таксономию. Если это так, используйте tax_query
Доступные параметры см. В документе WP_Query
. Вам просто нужно добавить имя вашей таксономии в параметр taxonomy
function posts_by_year() { // array to use for results $years = array(); // get posts from WP $posts = get_posts(array( 'numberposts' => -1, 'orderby' => 'post_date', 'order' => 'ASC', 'post_type' => 'project', 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'NAME OF YOUR CUSTOM TAXONOMY', 'field' => 'term_id', 'terms' => '27', 'operator' => 'NOT IN' ), ), )); // loop through posts, populating $years arrays foreach($posts as $post) { $years[date('Y', strtotime($post->post_date))][] = $post; } // reverse sort by year krsort($years); return $years; }