Wyświetlanie jednej kategorii wpisów na stronie głównej

Wyświetlanie jednej kategorii wpisów na stronie głównej

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');
    }
}

pobierz plik: iworks_only_one_category.php

Jak użyć podany kod?

Masz 3 rozwiązania:

  1. wrzuć załączony plik do folderu wp-content/plugins, a potem włącz wtyczkę
  2. wrzuć załączony plik do folderu wp-content/mu-plugins
  3. dołącz kod do pliku functions.php aktualnie używanego motywu
,

19 odpowiedzi na “Wyświetlanie jednej kategorii wpisów na stronie głównej”

  1. 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ć?

  2. 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”.

  3. 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ć:

    add_action('wp_head', 'iworks_only_one_category');
    function iworks_only_one_category()
    {
        if ( is_front_page() ) {
            global $wp_query;
            $wp_query->query('cat=69');
        }
    
    	if ( is_home() ) {
            global $wp_query;
            $wp_query->query('cat=-69');
        }
    }

    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ł?

  4. 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

  5. Masz piwo u mnie :)
    Kilka rozwiązań podanych w Internecie testowałem, ale tylko Twoje zadziałało :D

    Pozdrawiam

  6. 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ł

  7. 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;}
    }

  8. @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.

  9. 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?

  10. @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.

  11. Witaj Marcinie,

    Chyba coś źle robie, bo po dodaniu kodu i wpisaniu nr categorii wszystkie wpisy znikaja ze wszystkich kategorii.

    • @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.

  12. 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 ;)

Jeżeli chcesz skomentować, napisz mail na adres marcin w domenie strony na której jesteś. Dodam twoj komentarz.