Я ищу решение, которое позволяет мне печатать следующее:
Cat 1 Cat 2 Cat 3
Post 1 Post 1 Post 1
Post 2 Post 2 Post 2
Post 3 Post 3
Post 4
Править
Я ищу что-то, что только потребует одного запроса базы данных! Таким образом, если у Вас есть a foreach
в Вашем коде, сопровождаемом a new WP_Query
затем это не то, что я ищу (я планирую поместить это на домашнюю страницу своего веб-сайта).
Я имею, создают что-то для меня, что я использую довольно много, вот код, можно использовать краткие заголовки, идентификаторы или термин объект в $categories
массив, если Вы хотите получить все категории, можно использовать get_terms()
, и канал с набором объектов термина, но быть осторожным, нет никакой обработки для иерархии на этом коде.
$categories = array( 1, 'slug', 3 );
echo '<ul>';
foreach($categories as $category) {
$term = ( is_numeric($category) || is_object($category) ? get_term( $category, 'category' ) : get_term_by( 'slug', $category, 'category' ) );
$args = array(
'cat' => $term->term_id
// Add any other arguments to fit your needs
);
$q = new WP_Query( $args );
if( $q->have_posts() ) {
echo '<li><a href="' . get_term_link( $term->term_id, 'category' ) . '">' . $term->name . '</a><ul>';
while( $q->have_posts() ) {
$q->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul></li>';
} else {
}
}
echo '</ul>';
Непротестированный, все же один из самых простых подходов, которые я попробовал бы, следующий:
<?php
$category_ids = get_all_category_ids();
foreach ($category_ids as $values) {
$args = array('category' => $value);
$posts_array = get_posts( $args );
foreach ($posts_array as $post) : setup_postdata($post);
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
endforeach;
wp_reset_query();
}
?>
Можно использовать это... Установите сумму сообщений, в которых Вы нуждаетесь...
Также я поместил все это в отделении, таким образом, можно сделать структуру и разработать поиск.
<?php
$allcats = get_categories('child_of=0');
foreach ($allcats as $cat) :
$args = array(
'posts_per_page' => 3, // set number of post per category here
'category__in' => array($cat->term_id)
);
$customInCatQuery = new WP_Query($args);
if ($customInCatQuery->have_posts()) :
echo '<div>';
echo '<h3>'.$cat->name.'</h3>';
echo '<ul>';
while ($customInCatQuery->have_posts()) : $customInCatQuery->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
endwhile;
echo '</ul></div>';
?>
<?php
else :
echo 'No post published in:'.$cat->name;
endif;
wp_reset_query();
endforeach;
?>
Надеюсь, это поможет.
order_by = cat
в кодексе)!?
– Ben
25.02.2012, 01:12
при поиске плагина Сообщения Категории Списка могли бы работать на Вас.
Нос запрос, смотрите на get_posts
РЕДАКТИРОВАНИЕ ПЕРЕСМАТРИВАЕТ № 2
Я никогда не касался Переходного процесса API, до сих пор когда я видел ответ @MikeSchinkel в этом сообщении. Это вдохновило меня пересматривать это сообщение еще раз. После некоторого тестирования я придумал следующее:
Время для выполнения перешло по сравнению с ~0.07 секундами к ~0.002seconds
Время запроса базы данных понизилось, приблизительно сокращаются наполовину
С переходным процессом выполняются запросы только на 2 дб
Как код работает (Просто собирающийся обсуждать изменения из исходного кода от, ПЕРЕСМАТРИВАЮТ):
ШАГ 1
Мы должны сохранить значение $q
переходному процессу это - значение, которое содержит список категории с заголовками сообщения.
ШАГ 2
Мы сначала должны проверить, существует ли переходный процесс, и если ни один не существует, создайте переходный процесс. Если переходный процесс существует, получите его информацию
ШАГ 3
Эта информация теперь пройтись a foreach
цикл для печати списка с названиями категории и заголовков сообщения.
ШАГ 4
В настоящий момент переходный процесс будет обновляться каждые двенадцать часов. Это может быть установлено на комплект Ваши потребности. Однако переходный процесс должен будет быть удален и воссоздал каждый раз изменения состояния сообщения. Это могло бы быть из проекта для публикации, новое опубликованное сообщение или сообщение, это повреждается. Чтобы сделать это, необходимо использовать delete_transient
который будет сцеплен с transition_post_status
который будет инициирован каждый раз изменения состояния сообщения
Вот полный код:
В Вашем functions.php
add_action( 'transition_post_status', 'publish_new_post', 10, 3 );
function publish_new_post() {
delete_transient( 'category_list' );
}
В Вашем шаблоне, где необходимо отобразить список
<?php
if ( false === ( $q = get_transient( 'category_list' ) ) ) {
$args = array(
'posts_per_page' => -1
);
$query = new WP_Query($args);
$q = array();
while ( $query->have_posts() ) {
$query->the_post();
$a = '<a href="'. get_permalink() .'">' . get_the_title() .'</a>';
$categories = get_the_category();
foreach ( $categories as $key=>$category ) {
$b = '<a href="' . get_category_link( $category ) . '">' . $category->name . '</a>';
}
$q[$b][] = $a; // Create an array with the category names and post titles
}
/* Restore original Post Data */
wp_reset_postdata();
set_transient( 'category_list', $q, 12 * HOUR_IN_SECONDS );
}
foreach ($q as $key=>$values) {
echo $key;
echo '<ul>';
foreach ($values as $value){
echo '<li>' . $value . '</li>';
}
echo '</ul>';
}
?>
ПЕРЕСМОТРЕТЬ
Я недавно предложил очень легкое решение, которое является путем намного быстрее, чем другие данные возможные решения. На моей испытательной площадке я получаю общее время поколения только ~0.07 секунд и запросов только на 6 дб согласно Монитору Запроса, в то время как другие методы дают мне время поколения ~0.35 секунд и 50 дополнительных запросов дб.
Вот разбивка моего метода
ШАГ 1
Сначала необходимо создать пользовательский запрос с WP_Query
получать все опубликованные сообщения
$args = array(
'posts_per_page' => -1
);
$query = new WP_Query($args);
$q = array();
while ( $query->have_posts() ) {
}
/* Restore original Post Data */
wp_reset_postdata();
Шаг 2
Используя get_the_category
, получите список всех категорий, которым принадлежит сообщение.
$categories = get_the_category();
foreach ( $categories as $key=>$category ) {
$b = '<a href="' . get_category_link( $category ) . '">' . $category->name . '</a>';
}
ШАГ 3
Присвойте переменные заголовку сообщения и категориям сообщения
$a = '<a href="'. get_permalink() .'">' . get_the_title() .'</a>';
и
$b = '<a href="' . get_category_link( $category ) . '">' . $category->name . '</a>';
ШАГ 4
Объедините эти две переменные для формирования многомерного массива
$q[$b][] = $a;
Для наблюдения, что происходит в массиве, просто сделайте a var_dump
?><pre><?php var_dump($q); ?></pre><?php
ШАГ 5
Используя foreach
циклы, создайте свой список сообщения, отсортированный по категориям
foreach ($q as $key=>$values) {
echo $key;
echo '<ul>';
foreach ($values as $value){
echo '<li>' . $value . '</li>';
}
echo '</ul>';
}
ВСЕ ВМЕСТЕ ТЕПЕРЬ!
Вот полный код
<?php
$args = array(
'posts_per_page' => -1
);
$query = new WP_Query($args);
$q = array();
while ( $query->have_posts() ) {
$query->the_post();
$a = '<a href="'. get_permalink() .'">' . get_the_title() .'</a>';
$categories = get_the_category();
foreach ( $categories as $key=>$category ) {
$b = '<a href="' . get_category_link( $category ) . '">' . $category->name . '</a>';
}
$q[$b][] = $a; // Create an array with the category names and post titles
}
/* Restore original Post Data */
wp_reset_postdata();
foreach ($q as $key=>$values) {
echo $key;
echo '<ul>';
foreach ($values as $value){
echo '<li>' . $value . '</li>';
}
echo '</ul>';
}
?>