WordPress Filter Preise ACF-Feld Suche & Kategorien

WordPress Filter Preise ACF Field – Suche & Kategorien​

Inhaltsverzeichnis

Dieser Filter wird an das Ende in der WordPress functions.php kopiert. Damit kann ein Formular zum Filtern der Preise verwendet werden!

  • Preis von – bis (range)
  • Sortierung kleiner oder größter Preis
				
					/*Das Script*/

function wpa_filter_home_query( $query ){
    if($query->is_main_query() && isset( $_GET['search_price'] )){

		if(empty($_GET['search_price'][0])){
			$_GET['search_price'][0] = '1';
		}

		if(empty($_GET['search_price'][1])){
			$_GET['search_price'][1] = '19000';
		}

		$meta_query = array(
            array(
                'key' => 'search_price',
                'value' => array( $_GET['search_price'][0], $_GET['search_price'][1] ),
                'type' => 'numeric',
                'compare' => 'BETWEEN'
            )
        );
        $query->set( 'meta_query', $meta_query );
    }
}
add_action( 'pre_get_posts', 'wpa_filter_home_query' );
				
			
				
					/*Das Formular*/

<?php
	if($_GET['s']){
		$sucheeinbinden = '<input type="hidden" name="s" value="'.$_GET['s'].'">';
	}
	echo '
		<form action="" methode="GET" id="formsend">
			<div style="width:100%;">
				 <div style="width:45%;float:left;">
					<div style="margin-right:10px;">
						<lable>Preis</lable>
						<input type="number" step="1.0" name="search_price[]" value="'.$_GET['search_price'][0].'" class="form-control" placeholder="von" style="max-width: 100px;"></input>
						<lable> - </lable>
						<input type="number" step="1.0" name="search_price[]" value="'.$_GET['search_price'][1].'" class="form-control" placeholder="bis" style="max-width: 100px;"></input>
					</div>
				</div>

				<div style="width:40%;float:left;">
					<div class="form-group">
						<select onchange="this.form.submit()" class="form-control" name="order">
							<option disabled selected value>Sortieren</option>
							<option value="asc" '; if($_GET['order'] == 'asc'){echo ' selected';} echo'>Niedrigster Preis</otion>
							<option value="desc" '; if($_GET['order'] == 'desc'){echo ' selected';} echo'>Höchster Preis</otion>
						</select>
					</div>
				</div>
				<div style="width:10%;float:left;margin-left:10px;">
					<button type="submit"><i class="fas fa-search"></i></button>
				</div>
			</div>
			<input type="hidden" name="orderby" value="meta_value_num">
			'.$sucheeinbinden.'
		</form>
	';
?>
				
			
				
					/*MULTIFILTER*/
function wpa_filter_home_query( $query ){
    if($query->is_main_query() && isset( $_GET['search_price'] )){

		if(empty($_GET['search_price'][0])){
			$_GET['search_price'][0] = '1';
		}

		if(empty($_GET['search_price'][1])){
			$_GET['search_price'][1] = '19000';
		}

		$meta_query[] = array(
            'key' => 'search_price',
			'value' => array( $_GET['search_price'][0], $_GET['search_price'][1] ),
			'type' => 'numeric',
			'compare' => 'BETWEEN',
        );

		if(!empty($_GET['kapazitat']))
		{
			$meta_query[] = array(
				'key' => 'kapazitat',
				'value' => $_GET['kapazitat'],
				'type' => 'text',
				'compare' => 'LIKE',
			);
		}

		$query->set('meta_query',$meta_query);
    }
}
add_action( 'pre_get_posts', 'wpa_filter_home_query' );
				
			

Hier ist eine formulierte Erklärung

Diese Funktion und das zugehörige Formular ermöglichen die Filterung von Beiträgen anhand von benutzerdefinierten Metadaten in WordPress. In diesem Fall wird der Filter für die Suche nach Beiträgen verwendet, die bestimmte Preisbereiche und/oder Kapazitäten erfüllen.

Hier ist eine detaillierte Erklärung der Funktion und des Formulars:

1. **Die Funktion wpa_filter_home_query:**

“`php
function wpa_filter_home_query( $query ){
if($query->is_main_query() && isset( $_GET[‘search_price’] )){
“`

Diese Funktion wird beim Aufruf des `pre_get_posts`-Hooks aufgerufen, bevor die Beiträge abgerufen werden. Sie überprüft, ob es sich um die Hauptabfrage handelt (`$query->is_main_query()`) und ob der Parameter ‘search_price’ im GET-Array vorhanden ist (`isset( $_GET[‘search_price’] )`).

“`php
if(empty($_GET[‘search_price’][0])){
$_GET[‘search_price’][0] = ‘1’;
}

if(empty($_GET[‘search_price’][1])){
$_GET[‘search_price’][1] = ‘19000’;
}
“`

Wenn der Parameter ‘search_price’ nicht gesetzt ist oder leere Werte für den Preisbereich hat, werden standardmäßig die Werte ‘1’ und ‘19000’ gesetzt. Das bedeutet, wenn der Benutzer den Preisbereich nicht auswählt, werden Beiträge mit Preisen zwischen 1 und 19000 in der Ergebnisliste angezeigt.

“`php
$meta_query[] = array(
‘key’ => ‘search_price’,
‘value’ => array( $_GET[‘search_price’][0], $_GET[‘search_price’][1] ),
‘type’ => ‘numeric’,
‘compare’ => ‘BETWEEN’,
);
“`

Hier wird ein Meta-Abfrage-Array erstellt, das nach dem Metaschlüssel ‘search_price’ sucht und den Preisbereich zwischen den Werten aus dem GET-Array sucht. `’type’ => ‘numeric’` gibt an, dass es sich um numerische Werte handelt, und `’compare’ => ‘BETWEEN’` bedeutet, dass der Wert innerhalb des angegebenen Bereichs liegen muss.

“`php
if(!empty($_GET[‘kapazitat’]))
{
$meta_query[] = array(
‘key’ => ‘kapazitat’,
‘value’ => $_GET[‘kapazitat’],
‘type’ => ‘text’,
‘compare’ => ‘LIKE’,
);
}
“`

Wenn der Parameter ‘kapazitat’ im GET-Array gesetzt ist (der Wert wurde im Formular ausgewählt), wird eine zusätzliche Meta-Abfrage hinzugefügt, die nach dem Metaschlüssel ‘kapazitat’ sucht und nach dem angegebenen Wert (Teilübereinstimmung) sucht.

“`php
$query->set(‘meta_query’,$meta_query);
}
}
add_action( ‘pre_get_posts’, ‘wpa_filter_home_query’ );
“`

Schließlich wird das Meta-Abfrage-Array in die Hauptabfrage (`$query`) für die Beitragsabfrage gesetzt. Dadurch werden nur die Beiträge angezeigt, die den angegebenen Filterkriterien entsprechen.

2. **Das Formular:**

Das Formular ermöglicht es Benutzern, die Beiträge nach Preisbereich und Kapazität zu filtern.

“`php
<?php
if($_GET[‘s’]){
$sucheeinbinden = ‘<input type=”hidden” name=”s” value=”‘.$_GET[‘s’].'”>’;
}
echo ‘
<form action=”” methode=”GET” id=”formsend”>
<div style=”width:100%;”>
<div style=”width:45%;float:left;”>
<div style=”margin-right:10px;”>
<label>Preis</label>
<input type=”number” step=”1.0″ name=”search_price[]” value=”‘.$_GET[‘search_price’][0].'” class=”form-control” placeholder=”von” style=”max-width: 100px;”></input>
<label> – </label>
<input type=”number” step=”1.0″ name=”search_price[]” value=”‘.$_GET[‘search_price’][1].'” class=”form-control” placeholder=”bis” style=”max-width: 100px;”></input>
</div>
</div>

<div style=”width:40%;float:left;”>
<div class=”form-group”>
<select onchange=”this.form.submit()” class=”form-control” name=”order”>
<option disabled selected value>Sortieren</option>
<option value=”asc” ‘; if($_GET[‘order’] == ‘asc’){echo ‘ selected’;} echo’>Niedrigster Preis</option>
<option value=”desc” ‘; if($_GET[‘order’] == ‘desc’){echo ‘ selected’;} echo’>Höchster Preis</option>
</select>
</div>
</div>
<div style=”width:10%;float:left;margin-left:10px;”>
<button type=”submit”><i class=”fas fa-search”></i></button>
</div>
</div>
<input type=”hidden” name=”orderby” value=”meta_value_num”>
‘.$sucheeinbinden.’
</form>
‘;
?>
“`

– Das Formular verwendet die Methode “GET”, um die Filterparameter im URL-Query-String zu übergeben.
– Der Wert des Suchfelds (falls vorhanden) wird als verstecktes Feld im Formular gespeichert (`$sucheeinbinden`) und bei der Filterung beibehalten.
– Das Preisfilterfeld besteht aus zwei Eingabefeldern (von und bis) für den Preisbereich.
– Das Dropdown-Menü ermöglicht die Auswahl der Sortierreihenfolge (aufsteigend oder absteigend) basierend auf dem ausgewählten Wert (`$_GET[‘order’]`).
– Der Submit-Button (`<button type=”submit”>`) löst die Formularübermittlung aus, wenn der Benutzer die Filter ausgewählt hat.

Das Formular kann in einer WordPress-Seite oder -Vorlage verwendet werden, um die Beiträge entsprechend den ausgewählten Filterkriterien zu filtern und anzuzeigen. Beachte, dass die Metaschlüssel “search_price” und “kapazitat” in den Beiträgen vorhanden sein müssen, damit die Filterung ordnungsgemäß funktioniert.

*In diesem Artikel sind Partner-Links enthalten. Durch einen Klick darauf gelangst du direkt zum Anbieter. Solltest du dich dort für einen Kauf entscheiden, erhalte ich ei­ne kleine Provision. Danke für deine Unterstützung! Angebote sind immer nur gültig zum Zeitpunkt der Veröffentlichung des Artikels. Preise können sich ändern. Bitte überprüfe den aktuellen Preis auf der Website des Links.
Picture of Broschi
Broschi
Moin ich bin Broschi und das hier ist mein Blog. Abonniere gerne auch meinen Youtube Kanal! Du findest mich auch auf Pinterest, Instagram und Twitter. Kennst du schon meinen Amazon Shop*?
Amazon Shop
Affiliate Link!
ebay Angebote
Affiliate Link
Broschis Blog Newsletter
NEWSLETTER ABONNIEREN!
Teile die Begeisterung: Erzähle deinen Freunden von diesem Artikel! Und lass uns deine Gedanken hören – hinterlasse mir jetzt deinen Kommentar!

Deine Gedanken sind gefragt! Hast Du Fragen oder Ideen für den Artikel, lass sie raus. Dein Kommentar öffnet die Tür zu lebhaften Diskussionen und bietet eine Plattform für den Austausch von Wissen und Hilfe unter den Lesern. Teile gerne auch mit, falls dir etwas gefehlt hat – wir sind gespannt auf deine Meinung!

Schreibe deinen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert