реших го – кода се слага целия в functions.php на темата
function category_archive_sort_posts($query) {
if ( !is_admin() && $query->is_main_query() ) {
if ( is_category( 1192) ) {
$query->set( 'orderby', 'date' );
$query->set( 'order', 'ASC' );
}
}
}
add_action('pre_get_posts','category_archive_sort_posts');
Супер че си се справил!
Имай едно на ум че тази промяна може да бъде загубена при обновление на темата. Моят съвет е да изместиш тази функция в един много семпъл плъгин, който ще работи независимо от текущата тема.
Благодаря!
А как може да подредим първите 5-6 статии в дадената категория custom (чрез post ID, нещо като залепени най-горе), а след това да си е по дата на публикуване?
Много зависи какво точно правите. Има няколко варианта – да добавите custom filed, по който да соритрате, после по дата. Може да имате 2 отделни query-та: списък с постовете, който да са първи, после всички други, без горните.
Трудно мога да дам еднозначен отговор, защото опциите са няколко 🙂
Здравейте, спряхме се на custom fields подредбата, но в долната функция в момента изключва всички постове, които нямат custom field podredba.
function category_archive_sort_posts($query) {
if ( !is_admin() && $query->is_main_query() ) {
if ( is_category( 1192 ) ) {
$query->set( 'orderby', 'meta_value_num' );
$query->set( 'meta_key', 'podredba' );
$query->set( 'order', 'ASC' );
}
}
}
add_action('pre_get_posts','category_archive_sort_posts');
Как да съчетая
$query->set( 'orderby', 'meta_value_num' );
$query->set( 'meta_key', 'podredba' );
$query->set( 'order', 'ASC' );
с
$query->set( 'orderby', 'date' );
$query->set( 'order', 'ASC' );
В този случай ще ви трябва array за query-то, нещо подобно на тези: цък и цък – тези са само примерни, но имай предвид че можеш да използваш същите аргументи, които използваш и в стандартно WP_Query
да, благодаря!
направихме следното в custom страницата на категорията
<?php
$arAlreadyShowed = array();
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$bIsFirstPage = $paged == 1;
$args = array(
'cat' => 1192,
'orderby' => array( 'meta_value' => 'ASC', 'date' => 'DESC' ),
'meta_key' => 'podredba'
);
$query = new WP_Query( $args ); ?>
+
$arAlreadyShowed[] = get_the_id();
if(!$bIsFirstPage) {
continue;
}
за да не се повтарят и сложихме 2 loop-а if ( have_posts() ) : while ( have_posts() ) : the_post(); единия да показва custom field статиите, а втория останалите
Супер! Можете да маркирате темата като решена ако всичко е наред и супер че споделихте решението си, може да бъде полезно и на някой друг 🙂