Zaufane samouczki WordPress, kiedy ich najbardziej potrzebujesz.
Przewodnik dla początkujących po WordPressie
Puchar WPB
25 milionów+
Witryny korzystające z naszych wtyczek
16+
Lata doświadczenia z WordPressem
3000+
Samouczki WordPress od ekspertów

Jak wyświetlić wpis WordPress tylko wtedy, gdy ma określone pole niestandardowe

Wiesz, kiedy trzeba wyświetlić post WordPress tylko wtedy, gdy ma określone pole niestandardowe? Znamy to.

Kiedy zaczynaliśmy z WordPress, widok jakiegokolwiek fragmentu kodu wydawał się onieśmielający, zwłaszcza gdy wszystko, czego chcieliśmy, to wyświetlanie postów z konkretnymi informacjami.

Ale oto dobra wiadomość: po pomocy tysiącom początkujących użytkowników WordPressa odkryliśmy, że nawet coś, co brzmi technicznie, jak filtrowanie niestandardowych pól, nie musi być przerażające.

W rzeczywistości przeprowadzimy Cię przez prostą metodę kodu, aby to zrobić.

To rozwiązanie działa doskonale, niezależnie od tego, czy publikujesz zwykłe posty na blogu, czy niestandardowe typy postów na podstawie określonych kryteriów.

Jak wyświetlić wpis WordPress tylko wtedy, gdy ma określone pole niestandardowe

💡 W skrócie: Możesz wyświetlać tylko posty WordPress, które mają określone pole niestandardowe, używając niestandardowego WP_Query w plikach motywu (takich jak index.php) do filtrowania tych postów.

📌 Szybka uwaga: Ten samouczek dotyczy wyświetlania postów WordPress, jeśli mają one wartość wprowadzoną w określonym polu niestandardowym. Jeśli chcesz wyświetlić pola niestandardowe na stronie front-end postu WordPress, możesz przeczytać nasz przewodnik o tym, jak wyświetlać pola niestandardowe w motywach WordPress.

Dlaczego wyświetlać posty WordPress z określonym polem niestandardowym?

Tworząc wpis na swojej stronie WordPress, możesz użyć niestandardowych pól, aby dodać dodatkowe metadane do wpisu.

Metadane to dodatkowe informacje, które można dodać do wpisu. Na przykład, jeśli pisałbyś recenzję książki, mógłbyś dodać niestandardowe pola dla „Imię autora” lub „Ocena gwiazdkowa”.

Niestandardowe pola to zaawansowana koncepcja WordPress i istnieje wiele sposobów na dodawanie niestandardowych pól w WordPress. W naszym wpisie Niestandardowe pola WordPress 101: Wskazówki, triki i hacki znajdziesz wiele pomocnych wskazówek dotyczących używania i wyświetlania niestandardowych pól.

Możesz dodać metadane do posta za pomocą pól niestandardowych

Jeden z naszych użytkowników zapytał nas, jak wyświetlać wpisy WordPress tylko wtedy, gdy istnieje określone niestandardowe pole. Może to być przydatne, jeśli chcesz stworzyć niestandardową stronę zawierającą listę wszystkich wpisów, które zawierają określone niestandardowe pole i/lub wartość.

Po udzieleniu odpowiedzi pomyśleliśmy, że najlepiej będzie podzielić się nią ze wszystkimi, aby większa społeczność WordPress.org również mogła z niej skorzystać.

Edycja plików motywu WordPress: O czym należy pamiętać

Zanim zaczniesz, jest kilka ważnych rzeczy, o których powinieneś pamiętać podczas pracy z plikami motywu.

Jeśli dodasz kod bezpośrednio do plików motywu, Twoje zmiany zostaną utracone przy następnej aktualizacji motywu.

Dlatego zalecamy używanie wtyczki takiej jak WPCode do bezpiecznego dodawania niestandardowego kodu PHP bez edycji motywu. Jeśli wolisz edytować pliki motywu, upewnij się, że używasz motywu potomnego, aby Twoje zmiany zostały zachowane.

Aby prawidłowo wykonać ten samouczek, pamiętaj o kilku rzeczach:

  1. Ten samouczek obejmuje dodawanie kodu do Twojej witryny WordPress, więc nie jest on najbardziej odpowiedni dla całkowicie początkujących. Jeśli jesteś nowy w tym, będziesz musiał przeczytać nasz przewodnik o tym, jak kopiować i wklejać kod w WordPress.
  2. Zalecamy wykonanie kopii zapasowej witryny i/lub użycie środowiska stagingowego, aby Twoja aktywna witryna nie została naruszona w przypadku wystąpienia błędu. Dzieje się tak, ponieważ będziesz dodawać kod do plików motywu, co może być ryzykowne.
  3. Zalecamy zrozumienie, jak działa hierarchia szablonów WordPress, abyś wiedział, gdzie później dodać kod.
  4. Musisz również zapoznać się z tym, jak działają pętle WordPress, ponieważ będziemy wywoływać te parametry w zapytaniu WordPress.

📍Ważna uwaga: Ten samouczek działa tylko z klasycznymi motywami WordPress. Motywy blokowe używają Edytora Witryny i innego podejścia do wyświetlania treści, więc ta metoda edycji plików szablonów nie będzie miała zastosowania.

Mając to na uwadze, przyjrzyjmy się, jak wyświetlić post WordPress tylko wtedy, gdy ma określone niestandardowe pole.

Krok 1: Zainstaluj wtyczkę Fragmentów Kodu

Niektóre samouczki powiedzą Ci, aby otworzyć plik index.php Twojego motywu i całkowicie przepisać pętlę WordPress, używając czegoś zwanego WP_Query. Nie zalecamy tego robić.

Modyfikowanie głównych plików szablonów może zepsuć układ Twojej witryny, spowodować zduplikowane zapytania do bazy danych, które spowolnią Twoją witrynę, i całkowicie zepsuć paginację (przyciski „Następna strona”).

Zamiast tego najbezpieczniejszym i najbardziej wydajnym sposobem jest użycie haka akcji pre_get_posts. Mówi to WordPressowi, aby filtrował posty zanim jeszcze załaduje szablon strony.

Aby dodać ten niestandardowy kod, zalecamy użycie wtyczki takiej jak WPCode. Pozwala ona na bezpieczne dodawanie kodu PHP bez bezpośredniego dotykania plików motywu, co oznacza, że Twoja witryna nie ulegnie awarii, jeśli popełnisz błąd, a Twoje zmiany nie zostaną utracone podczas aktualizacji motywu.

Krok 2: Dodaj kod niestandardowego zapytania

Po zainstalowaniu i aktywowaniu WPCode przejdź do Fragmenty Kodu » Dodaj Fragment w swoim panelu WordPress i wybierz „Dodaj własny kod (Nowy Fragment)”.

Dodaj niestandardowy fragment kodu w WPCode

Upewnij się, że „Typ kodu” jest ustawiony na Fragment PHP.

Następnie wklej następujący kod:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_custom_field' );

function wpb_filter_posts_by_custom_field( $query ) {

    // Only modify the main query on the front-end homepage
    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        // Tell WordPress to only get posts with the custom field key 'color'
        $query->set( 'meta_key', 'color' );

    }
}

Najpierw kod sprawdza, czy modyfikuje tylko główny zapytanie po stronie front-endu Twojej witryny (konkretnie stronę główną bloga), pozostawiając pulpit administracyjny WordPress całkowicie nietknięty.

Następnie używa $query->set, aby poinformować WordPress, aby pobierał tylko posty, do których dołączone jest pole niestandardowe „kolor”.

Ponieważ ten kod modyfikuje zapytanie przed załadowaniem strony, domyślna paginacja Twojego motywu będzie działać idealnie bez żadnego dodatkowego kodu! Po prostu przełącz przełącznik WPCode na „Aktywny” i kliknij przycisk „Zapisz fragment”, aby go opublikować.

Krok 3: Filtruj według określonej wartości metadanych (Opcjonalnie)

Co jeśli chcesz znaleźć posty, w których niestandardowe pole „kolor” ma określoną wartość, na przykład „niebieski”? Aby to zrobić, wystarczy dodać regułę meta_value do swojego kodu.

Twój zaktualizowany fragment będzie wyglądał tak:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_custom_field_value' );

function wpb_filter_posts_by_custom_field_value( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'color' );
        $query->set( 'meta_value', 'blue' );

    }
}

Krok 4: Filtruj według porównania metadanych (Opcjonalnie)

Możesz jeszcze bardziej rozszerzyć filtrowanie za pomocą parametru meta_compare. Pozwala to znaleźć posty, które nie pasują do wartości.

Na przykład, aby wyświetlić wszystkie posty, w których kolor jest nie „niebieski”, Twoje zapytanie wyglądałoby tak:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_meta_compare' );

function wpb_filter_posts_by_meta_compare( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'color' );
        $query->set( 'meta_value', 'blue' );
        $query->set( 'meta_compare', '!=' );

    }
}

!= mówi WordPressowi, aby znalazł wszystkie posty, w których pole 'kolor' istnieje, ale nie jest równe 'niebieski'.

Istnieje wiele innych operatorów porównania, których możesz użyć, a które znajdziesz w oficjalnej dokumentacji deweloperskiej WordPress.

Krok 5: Filtruj posty według wielu pól niestandardowych (meta_query)

W bardziej złożonych scenariuszach, gdzie potrzebujesz filtrować posty na podstawie wielu pól niestandardowych lub łączyć warunki (AND/OR), użyjesz tablicy meta_query.

Pozwala to zdefiniować tablicę warunków, z których każdy celuje w inne pole niestandardowe lub wartość.

Na przykład, aby wyświetlić posty z kolorem „niebieski” i rozmiarem „duży”, Twój kod wyglądałby tak:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_multiple_fields' );

function wpb_filter_posts_by_multiple_fields( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $meta_query = array(
            'relation' => 'AND', // or 'OR'
            array(
                'key'     => 'color',
                'value'   => 'blue',
                'compare' => '=',
            ),
            array(
                'key'     => 'size',
                'value'   => 'large',
                'compare' => '=',
            ),
        );

        $query->set( 'meta_query', $meta_query );

    }
}

To zapytanie pobierze posty, które mają zarówno niestandardowe pole „kolor” ustawione na „niebieski”, JAK I niestandardowe pole „rozmiar” ustawione na „duży”.

Możesz dostosować parametr 'relation' na „OR”, aby znaleźć posty pasujące do co najmniej jednego z warunków.

Przykład z życia wzięty: Wyświetl tylko recenzje 5-gwiazdkowe

Załóżmy, że prowadzisz witrynę z recenzjami książek WordPress review site i używasz niestandardowego pola o nazwie star_rating do przechowywania ocen recenzji.

Możesz łatwo wyświetlić tylko posty, które mają ocenę 5 gwiazdek na stronie głównej swojego bloga, używając tego zapytania:

<?php
add_action( 'pre_get_posts', 'wpb_show_only_five_star_reviews' );

function wpb_show_only_five_star_reviews( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'star_rating' );
        $query->set( 'meta_value', '5' );

    }
}

Jest to niezwykle przydatne, jeśli chcesz mieć pewność, że Twój główny kanał zawiera tylko Twoje najwyżej oceniane treści.

Często zadawane pytania dotyczące wyświetlania posta, jeśli ma on określone niestandardowe pole

Oto kilka pytań, które nasi czytelnicy często zadają na temat wyświetlania posta, jeśli ma on tylko określone niestandardowe pole:

Często zadawane pytania dotyczące wyświetlania posta, jeśli ma on określone niestandardowe pole

Oto kilka pytań, które nasi czytelnicy często zadają na temat wyświetlania posta, jeśli ma on tylko określone niestandardowe pole:

Czy jest sposób, aby to zrobić bez edycji plików motywu?

Tak! W rzeczywistości metoda pre_get_posts, którą opisujemy w tym samouczku, jest specjalnie zaprojektowana tak, abyś nie musiał edytować plików swojego motywu. Korzystając z wtyczki fragmentów, takiej jak WPCode, możesz bezpiecznie zastosować ten filtr do swojej witryny, nie dotykając ani jednej linii kodu rdzeniowego Twojego motywu.

Czy mogę filtrować posty według wielu niestandardowych pól?

Możesz. Hak pre_get_posts akceptuje złożone argumenty. Użyłbyś tablicy „meta_query”, która pozwala zbudować listę warunków pasujących do wielu pól niestandardowych jednocześnie.

Czy ta metoda działa z motywami blokowymi?

Chociaż hak pre_get_posts może technicznie wchodzić w interakcje z motywami blokowymi, natywny blok WordPress Query Loop nie ma wbudowanego interfejsu do filtrowania pól niestandardowych od razu po wyjęciu z pudełka. Jeśli używasz motywu blokowego Full Site Editing, najłatwiejszym podejściem jest użycie wtyczki, która dodaje filtrowanie pól niestandardowych do bloku Query Loop, zamiast pisania niestandardowego kodu PHP.

Jaka jest różnica między „meta_key” a „meta_value”?

Pomyśl o „meta_key” jako o nazwie etykiety, na przykład „Kolor” lub „Status”. „Meta_value” to rzeczywiste dane wprowadzone w tym polu, takie jak „Niebieski” lub „Opublikowany”.

Użycie klucza znajduje każdy wpis z tym niestandardowym polem, podczas gdy użycie wartości filtruje go, aby znaleźć tylko wpisy z tą konkretną informacją.

Dowiedz się więcej sposobów na dostosowanie swojej witryny WordPress

Oto więcej sposobów na dostosowanie stron WordPress:

Mamy nadzieję, że ten samouczek pomógł Ci dowiedzieć się, jak wyświetlać wpis WordPress tylko wtedy, gdy ma określone niestandardowe pole. Możesz również zapoznać się z naszym kompletnym przewodnikiem na temat edycji witryny WordPress oraz naszymi ekskluzywnymi wyborami najlepszych wtyczek Figma dla WordPress.

Jeśli podobał Ci się ten artykuł, zasubskrybuj nasz kanał YouTube po samouczki wideo WordPress. Możesz nas również znaleźć na Twitterze i Facebooku.

Ujawnienie: Nasze treści są wspierane przez czytelników. Oznacza to, że jeśli klikniesz niektóre z naszych linków, możemy otrzymać prowizję. Zobacz jak finansowany jest WPBeginner, dlaczego to ważne i jak możesz nas wesprzeć. Oto nasz proces redakcyjny.

Ostateczny zestaw narzędzi WordPress

Uzyskaj BEZPŁATNY dostęp do naszego zestawu narzędzi – kolekcji produktów i zasobów związanych z WordPress, które powinien mieć każdy profesjonalista!

Interakcje czytelników

11 KomentarzyZostaw odpowiedź

  1. Mam pytanie, panie, jeśli chcę wyświetlić pojedynczy post i niestandardowe pola, co powinienem zrobić.
    Nie chcę wyświetlać postu z określonymi niestandardowymi polami. Chcę wyświetlić wszystkie niestandardowe pola posta.

  2. Cześć, dziękuję za pomocny tutorial. Mam pytanie, na stronie internetowej WordPress ustawiłem wartość meta o nazwie "meta_country", a następnie przypisałem do każdego posta kraj artykułu, np. "us", "uk", "fr"... Teraz próbuję dodać gdzieś na stronie głównej bloga link, który wyświetli listę wszystkich postów z określonym krajem i określonym tagiem. Na przykład wszystkie posty z "UK" oznaczone tagiem "APPLE".
    Nie rozumiem, jak to zrobić, czy ktoś mógłby mi pomóc?

  3. Nie udało mi się wygenerować żadnych wyników, chyba że uwzględniłem parametr „post_type” w zapytaniu.

    np. $the_query = new WP_Query(‘post_type=page&meta_key=color’);

  4. Cześć,

    Jak mógłbym wyświetlić posty, które NIE mają określonego niestandardowego pola? Masz jakiś pomysł?

    Dzięki!!!

    • z tego, co wiem z php, musi to być meta_key!=’your key’

      ;po prostu musisz wiedzieć, że „!” oznacza „nie”

Zostaw odpowiedź

Dziękujemy za pozostawienie komentarza. Pamiętaj, że wszystkie komentarze są moderowane zgodnie z naszą polityką komentowania, a Twój adres e-mail NIE zostanie opublikowany. Proszę NIE używaj słów kluczowych w polu nazwy. Prowadźmy osobistą i znaczącą rozmowę.