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.

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

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:
- 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.
- 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.
- Zalecamy zrozumienie, jak działa hierarchia szablonów WordPress, abyś wiedział, gdzie później dodać kod.
- 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
- Krok 2: Dodaj kod niestandardowego zapytania
- Krok 3: Filtruj według określonej wartości metadanych (Opcjonalnie)
- Krok 4: Filtruj według porównania metadanych (Opcjonalnie)
- Krok 5: Filtruj posty według wielu pól niestandardowych (meta_query)
- Przykład z życia wzięty: Wyświetl tylko recenzje 5-gwiazdkowe
- Często zadawane pytania dotyczące wyświetlania posta, jeśli ma on określone niestandardowe pole
- Często zadawane pytania dotyczące wyświetlania posta, jeśli ma on określone niestandardowe pole
- Dowiedz się więcej sposobów na dostosowanie swojej witryny WordPress
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)”.

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:
- Jak inaczej stylizować poszczególne kategorie w WordPress
- Jak dodać niestandardowy pasek przewijania w WordPress
- Jak dodać niestandardowe style do widżetów WordPress
- Jak inaczej stylizować każdy wpis WordPress
- Jak używać skróconych kodów w motywach WordPress
- Jak wyróżnić nowe posty dla powracających odwiedzających w WordPress
- Jak zmienić stronę paska bocznego w 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.


ahmed
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.
Dave101
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?
Максим Каминский
wielkie dzięki, bardzo pomogło!
pjhooker
Dzięki!
Eduard Unruh
omg w końcu DZIĘKI!
Mario M
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’);
sacha
Wspaniale, tak prosto i czysto.
Dziękuję.
scottlee.me
@ad Świetne pytanie! Ja też jestem ciekawy.
ad
Cześć,
Jak mógłbym wyświetlić posty, które NIE mają określonego niestandardowego pola? Masz jakiś pomysł?
Dzięki!!!
tara tin
z tego, co wiem z php, musi to być meta_key!=’your key’
;po prostu musisz wiedzieć, że „!” oznacza „nie”
brunobruno2
Pięknie! Dziękuję bardzo za udostępnienie. Działa jak marzenie.