Gillar du att bara visa en WordPress post om den har ett specifikt custom field?
Customize-fält är en praktisk funktion i WordPress som allow you to add additional information to your WordPress posts and pages. Du kanske gillar att filtrera ditt content by dina custom fields.
I den här artikeln kommer vi att visa you hur man visar en WordPress post endast om den har ett specifikt custom field.
Varför visa WordPress Posts med ett specifikt Custom Field?
När du skapar ett post på din website i WordPress kan du använda custom fields för att add to ytterligare metadata till posten. Metadata är information om posten, t.ex. rubrik, författare och publiceringsdatum.
Custom fields är ett avancerat WordPress-koncept, och det finns många sätt att add to custom fields i WordPress, bland annat med tillägget Advanced Custom Fields (ACF).
Du hittar massor av användbara tips om hur du använder och visar custom fields i vårt post, WordPress Custom Fields 101: Tips, Tricks, and Hacks.
En av våra användare frågade oss hur man visar WordPress-poster endast om ett specifikt customze-fält finns. Detta kan vara användbart om du vill skapa en custom page som listar alla posts som innehåller ett specifikt custom field och/eller värde.
Efter att ha svarat tillbaka med svaret tyckte vi att det skulle vara bäst att dela det med alla andra så att den större WordPress.org-communityn också kan dra nytta av det.
Edit Your WordPress Theme Files: Vad du bör tänka på
För att kunna följa denna tutorial på rätt sätt, här är några saker du bör tänka på:
- Denna tutorial innebär att du måste editera dina WordPress theme-filer med kod, så det är ej den mest lämpliga för nybörjare. Om du är new på det här behöver du läsa vår guide om hur du copy and paste kod i WordPress.
- Vi rekommenderar att du säkerhetskopierar din website och/eller använder en staging-miljö så att din live site inte påverkas när ett error uppstod. Detta beror på att du kommer att lägga till kod i dina theme-filer, vilket kan vara riskabelt.
- Vi rekommenderar att du förstår hur mall-hierarkin i WordPress fungerar så att du vet var du ska add to koden senare.
- Du måste också bekanta dig med hur WordPress-loopar fungerar eftersom vi kommer att anropa dessa parametrar i en WordPress-sökning.
Observera också att denna tutorial endast fungerar med klassiska WordPress-teman, eftersom block themes har en annan uppsättning temafiler.
Med detta sagt, låt oss ta en titt på hur man visar en WordPress post endast om den har ett specifikt custom field.
Visar ett WordPress Post endast om det har ett specifikt Custom Field
Innan vi visar dig koden du behöver använda måste du veta vilken theme-fil du behöver add to. Mest troligt kommer det att vara en page template, som index.php, archive.php eller page.php.
Låt oss säga att du vill add to filen index.php i temat Twenty Twenty-One. Så här gillar WordPress loop-delen av den filen för tillfället:
<?php
if ( have_posts() ) {
// Load posts loop.
while ( have_posts() ) {
the_post();
get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
}
// Previous/next page navigation.
twenty_twenty_one_the_posts_navigation();
} else {
// If no content, include the "No posts found" template.
get_template_part( 'template-parts/content/content-none' );
}
get_footer();
Den här koden använder WordPress standardloop (have_posts(
) och the_post(
)) för att visa posts. Denna metod är lämplig för de flesta standard WordPress themes och används för att visa posts utan någon customize filtrering eller sortering.
Låt oss nu säga att du använder det anpassade fältet ’color’ som i exemplet ovan. Du måste ersätta hela den koden med snippet under:
<?php
// The Query to show a specific Custom Field
$the_query = new WP_Query('meta_key=color');
// Load posts loop.
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
}
// Previous/next page navigation.
twenty_twenty_one_the_posts_navigation();
} else {
// If no content, include the "No posts found" template.
get_template_part( 'template-parts/content/content-none' );
}
// Reset Post Data
wp_reset_postdata();
get_footer();
I den här nya koden introducerade vi en anpassad sökning ($the_query = new WP_Query('meta_key=color'
);) för att hämta posts baserat på ett specifikt custom field-värde (i det här fallet posts med ett custom field ’color’).
Den använder sedan en anpassad slinga (if ($the_query->have_posts(
)))) för att iterera över de posts som hämtas av denna customize-fråga och visar varje posts content på samma sätt som det första snippet.
Vi addade också funktionenwp_reset_postdata()
för att säkerställa att WordPress återgår till att visa alla posts korrekt efter customizer-sökningen. Detta säkerställer att webbplatsen fungerar smidigt och visar rätt content för användarna.
Nu, om du vill visa specifika posts som har ett custom field med ett specifikt värde, så behöver du bara ändra sökningen från rad 3 så här:
$the_query = new WP_Query( 'meta_value=blue' );
Detta kommer att visa alla posts som har ett ”blue”-värde i något customize-fält.
Om du vill se till att fältet ”färg” har ett ”blått” värde, kommer din sökning att se ut så här:
$the_query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue' ) );
Du kan lära dig mer om ytterligare parametrar som du kan använda i din sökning på WordPress WP_Query code reference page.
När du har saved koden i PHP-filen för page template kan du kontrollera din WordPress site on the front end för att se din kod i action.
Vi hoppas att denna tutorial hjälpte dig att lära dig hur du visar ett WordPress post endast om det har ett specifikt customze-fält. Du kanske också vill se vår kompletta guide till sökmotorsoptimering i WordPress eller kontrollera vår lista över de bästa WordPress-tilläggen för att få din website att växa.
If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.
Syed Balkhi says
Hey WPBeginner readers,
Did you know you can win exciting prizes by commenting on WPBeginner?
Every month, our top blog commenters will win HUGE rewards, including premium WordPress plugin licenses and cash prizes.
You can get more details about the contest from here.
Start sharing your thoughts below to stand a chance to win!
ahmed says
i have a question sir if i want to display single post and custom fields then what i should do.
i dont want to display the post with specific custom fields. i want to display all custom fields of post
Dave101 says
Hi, thank for the useful tutorial. I have a question, in a wordpress website i set a meta value named ”meta_country” and then i set every post with the country of the article, like ”us”, ”uk”, ”fr”… Now I’m trying to add somewhere in the home of the blog a link that show list of all post with a specific country and a specific tag. For example all ”UK” post tagged ”APPLE”.
I don’t understand how to do that, someone could help me?
Максим Каминский says
great thanks, it help wery well!
pjhooker says
Thx!
Eduard Unruh says
omg finally THANKS!
Mario M says
I wasnt able to generate any results unless I included ”post_type” parameter into the query.
ie: $the_query = new WP_Query(’post_type=page&meta_key=color’);
sacha says
Wonderful, just so simple and clean.
Thank you.
scottlee.me says
@ad Great question! I’m curious too.
ad says
Hi,
How could I show posts that DON’T have a specific Custom Field? Any idea?
Thanks!!!
tara tin says
as I know from php it must be meta_key!=’your key’
;just you need to know that ”!” means ”not”
brunobruno2 says
Beatiful! Many thanks for sharing it. Works like a charm.