У меня возникла проблема, при которой, хотя изначально страница отображается с выбранным «Все» в раскрывающемся меню, если вы переходите к категории (хорошо отображается), а затем возвращаетесь к «Все» в раскрывающемся списке, вы видите один пост. Это вместо первоначально отображаемой страницы со всеми категориями. Мне нужна страница, чтобы в основном отображать одну и ту же страницу для «Все» независимо. Какие-нибудь мысли?
wp_dropdown_categories('show_option_all=All&hide_empty=0&show_count=0&orderby=name&echo=0');
На прошлой неделе я написал похожую статью о WPSE, и кажется, что они могут быть связаны. Для удобства вот пост
Вот вариант кода, который вы используете. я использую get_categories()
здесь, чтобы достичь той же цели. Мне пришлось немного изменить свой код, чтобы сделать его приемлемым для ваших нужд.
Однако для этого нужно внести и другие изменения. Когда вы выбираете All Categories
вариант, вы попадете на страницу, которая будет отображать то, что вам нужно отобразить. Эта страница вам придется вручную Создайте
Как вы знаете, в WordPress нет страниц с индексным архивом. (Проверять, выписываться эта почта Я сделал на ту же тему). Что это значит, domain.com/category/
возвращает 404.
Итак, чтобы все это работало, вам нужно будет сделать копию page.php, переименовать ее в нечто вроде page-category.php (см. кодекс о том, как создавать собственные шаблоны страниц), откройте его, создайте свой пользовательский запрос отображать то, что вы хотели бы отображать при посещении этой страницы
Теперь вам нужно создать свою страницу в бэкэнде. Я хотел бы предложить вам использовать слизень category
так что когда вы посещаете domain.com/category/
, эта страница будет отображаться. (Просто помни, ты не могу создать дочерние страницы для этой страницы, это нарушит иерархию). Я также сделал код для перехода domain.com/category/
когда All Categories
выбран
Кроме того, код должен работать нормально. Вам просто нужно проверить структуру URL, а также установить параметры в get_categories()
чтобы удовлетворить ваши потребности. Вот выпадающий код.
<select name="event-dropdown" onchange='document.location.href=this.options[this.selectedIndex].value;'>
<option value=""><?php echo esc_attr(__('Select Category')); ?></option>
<?php
$option = '<option value="' . get_option('home') . '/category/">All Categories</option>'; // change category to your custom page slug
$categories = get_categories();
foreach ($categories as $category) {
$option .= '<option value="'.get_option('home').'/category/'.$category->slug.'">';
$option .= $category->cat_name;
$option .= ' ('.$category->category_count.')';
$option .= '</option>';
}
echo $option;
?>
</select>
РЕДАКТИРОВАТЬ
У меня на самом деле была идея, которая пригодится мне. Недавно я ответил на вопрос об отображении всех категорий в списке со всеми заголовками сообщений в определенной категории. Эта же идея может быть использована в вашем шаблоне page-category.php.
Когда пользователь выбирает All Categories
вариант, они будут перенесены на эту страницу, где будут перечислены все категории и заголовок сообщения.
Вот полный код 🙁для объяснения кода, см. мой пост Вот)
В твоих 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->cat_ID ) . '">' . $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>';
}?>
Других решений пока нет …