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*/
';
}
echo '
';
?>
/*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.