Załóżmy, że na stronie głównej chcemy wyświetlać tylko wpisy z kategorii o identyfikatorze 10. To co musimy zrobić, to powiedzieć WordPress’owi że chcemy tylko posty z określonej kategorii i jej podkategorii. Realizacja tego zadania polega na zmianie zawartości klucza cat w zapytaniu. Podmianę wykonujemy w taki oto sposób:
Poniższy kod należy dodać do pliku functions.php używanego motywu.
add_action('wp_head', 'iworks_only_one_category'); function iworks_only_one_category() { if ( is_home() || is_front_page() ) { global $wp_query; $wp_query->query('cat=10'); } } |
Jeżeli chcemy inną kategorię, to należy zmienić 10 na inny, wybrany identyfikator. Można tam też umieścić ich kilka z przecinkami.
Wyklucz kategorię
Wykluczanie wybranej kategorii ze strony głównej realizujemy przez dopisanie znaku minus, wtedy te z minusem będą pomijane przy wyświetlaniu.
add_action('wp_head', 'iworks_exclude_one_category'); function iworks_exclude_one_category() { if ( is_home() || is_front_page() ) { global $wp_query; $wp_query->query('cat=-10'); } } |
Jak użyć podany kod?
Masz 3 rozwiązania:
- wrzuć załączony plik do folderu
wp-content/plugins
, a potem włącz wtyczkę - wrzuć załączony plik do folderu
wp-content/mu-plugins
- dołącz kod do pliku
functions.php
aktualnie używanego motywu
Muzzi
Witaj, dobry artykuł ale mam pewien problem z twoim rozwiązaniem. Według twojego sposobu artykuły są wyświetlane tak jakby były czytane jako archiwum, np. w TwentyTen główna strona nie wyświetla zdjęć tak jak jest to przy normalnym wyświetlaniu wszystkiego na stronie głównej tylko wyświetla się jak archiwum kategorii, czy można coś na to poradzić?
Marcin
Oczywiście że można, po prostu trzeba inaczej wyświetlać rezultat. Ciężko mi dać uniwersalną radę, ale sprawdź różnice między wyświetlaniem na stronie głównej a archiwum, prawdopodobnie będą się różnić wykorzystaniem „the_content” oraz „the_excerpt”.
BlackRaven
Witam,
Pisałem do Ciebie na forum WP ale niestety temat się urwał, więc może tu mi pomożesz do końca. Efekt udało się osiągnąć dzięki modyfikacji funkcji polegającej na rozdzieleniu jej na 2 warunki więc poprawiona funkcja ma postać:
Dzięki czemu na stronie głównej wyświetlają się tylko AKTUALNOŚCI (u mnie kategoria numer 69), a na BLOGU wszystkie posty prócz kategorii AKTUALNOŚCI (kategoria numer 69)
Ale… pojawił się pewien problem… Mam ustawione w CZYTANIU, aby WP pokazywał tylko 3 wpisy, a kolejne na następnych stronach, lecz gdy kliknę na następną stronę to są te same wpisy co na pierwszej, więc niby przerzuca strony ale na każdej stronie jest to samo, dotyczy o zarówno STRONY STARTOWEJ jak i strony z WPISAMI… Jakiś pomysł?
Marcin Pietrzak
Odpisałem na forum.
sl
Witam, skrypt działa ale po dodaniu go, na stronie głównej przestała działać paginacja (mimo że własciwie wyswietlaja sie wpisy z kategorii NOWOŚCI), jednak gdy jestem bezsposrednio w kategorii NOWOŚCI paginacja dziła. Może mógłbyś coś poradzić na to ? tutaj link do mojej strony
sl
Problem chyba rozwiązany, jednak po przez wykluczanie kategorii (teraz paginacja przy użyciu wtyczki WPpaginate działa) , opis co i jak tutaj http://pl.forums.wordpress.org/topic/wybrane-kategorie-wpisow-na-stronie-glownej
Marcin Pietrzak
@sl: dzięki za podpowiedź dobrego rozwiązania.
Łukasz
Masz piwo u mnie :)
Kilka rozwiązań podanych w Internecie testowałem, ale tylko Twoje zadziałało :D
Pozdrawiam
Marcin Pietrzak
@Łukasz – piwem nie pogardzę, spotkać mnie możesz na http://2013.wroclaw.wordcamp.org/
Paweł
Cześć,
WP: 3.8.1–pl_PL
Templatka: Surface
Dopisałem kod powyżej do Functions i działa, ale strony nie chcą się przerzucać. Po wyrzuceniu Twojego kodu wszystko wraca do normy tylko na stronie głównej wrzucają się wszystkie arty
Zerkniesz na to?
Paweł
Marcin Pietrzak
@Paweł: nie bardzo rozumiem na czym miałby polegać moje „zerkanie”?
Paweł
Jak typowy informatyk, siedzisz w kodzie i nie bardzo łapiesz, co się do ciebie mówi/pisze.
ten kod działa poprawnie:
add_action(’pre_get_posts’, 'gloss_add_glossary_cat’ );
function gloss_add_glossary_cat() {
global $wp_query;
global $gloss_category;
if( is_home() && !is_category() ) {
$wp_query->query_vars[’cat’] = ’34’ . $gloss_category;}
}
Marcin Pietrzak
@Paweł to co napisałeś modyfikuje zmienne zapytania, a nie samo zapytanie. To że działa, to raczej przypadek. Poza tym skąd miałem wiedzieć o „$gloss_category”? Zobacz na poprzedni swój komentarz, nic w nim takiego nie ma.
Przemo
Witam
Mam pytanie chciałbym wyświetlić na stronie po 3 posty z 3 wybranych kategorii w rzędzie. Jak mogę to zrobić i w jakich plikach?
Przemo
Dodam że chodzi mi o stronę główna.
Z góry dzięki
Marcin Pietrzak
@przemo: najłatwiej byłoby stworzyć plik „home.php” lub „front-page.php” (zależy to od ustawień czytania) i tam umieścić odpowiedni kod, czyli 3x WP_Query po jednym wpisie z każdej kategorii.
lukasz
Witaj Marcinie,
Chyba coś źle robie, bo po dodaniu kodu i wpisaniu nr categorii wszystkie wpisy znikaja ze wszystkich kategorii.
Marcin Pietrzak
@lukasz – albo koliduje to z jakąś inną wtyczką albo wszystkie wpisy należą do wykluczanej kategorii. Kod jest tak prosty, że raczej nie można w nim popełnić błędu.
lukasz
mam dwie kategorie.. ale może faktycznie było cos nie tak z inna wtyczką… no to żeby jeszcze dołożyć kolejną, zainstalowałem taką co wyklucza kategorie i jakoś śmiga ;)
zresztą sam zobaczysz wtorek/środa ;)