Verwenden einer Checkliste, um nach Metadaten zu suchen

Ich bin völlig fest und würde sehr einige Hinweise schätzen.

Das Problem : Ich möchte eine Suchfunktion erstellen, mit der ich japanische Onsen nach ihren Annehmlichkeiten filtern kann, z. B. Parkplatz, Sauna, Felsenbad usw., die als Metadaten in der Post gespeichert sind (Checkliste).

Ich habe diese Annehmlichkeiten als Metadaten-Checkliste in der Post mit folgendem Code registriert:

add_filter( 'rwmb_meta_boxes', 'onsen_register_meta_boxes' ); function onsen_register_meta_boxes( $meta_boxes ) { $meta_boxes[] = array( 'title' => esc_html__( 'Amenities', 'onsen' ), 'context' => 'side', 'fields' => array( // CHECKBOX LIST array( 'id' => "{$prefix}checkbox_list", 'type' => 'checkbox_list', // Options of checkboxes, in format 'value' => 'Label' 'options' => array( 'sauna' => esc_html__( 'Sauna', 'onsen' ), 'parking' => esc_html__( 'Parking', 'onsen' ), 'natural' => esc_html__( 'Natural', 'onsen' ), 'food' => esc_html__( 'Food', 'onsen' ), 'station' => esc_html__( 'Close to Station', 'onsen' ), 'towel' => esc_html__( 'Towel', 'onsen' ), 'bedrock' => esc_html__( 'Bedrock Bath', 'onsen' ), 'shampoo' => esc_html__( 'Shampoo', 'onsen' ), 'rest' => esc_html__( 'Rest Area', 'onsen' ), 'tattoo' => esc_html__( 'Tattoo OK', 'onsen' ), ), ), ), ); return $meta_boxes; } 

Dieser Code gibt mir die Checkliste im Backend und so kann ich einfach die relevanten Kästchen für ein bestimmtes Onsen überprüfen. Ich verstehe, dass ich ein Front-End-Benutzerformular mit einer Checkliste aller Annehmlichkeiten erstellen muss, aber ich weiß nicht, wie die $ -Argumente für die WP_Query auf einer benutzerdefinierten Suchseite erstellt werden, da es sich um eine Checkliste handelt keine Datenpunkte zum greifen … Jede Hilfe würde sehr geschätzt werden.

Solutions Collecting From Web of "Verwenden einer Checkliste, um nach Metadaten zu suchen"

Haben Sie sich die Shortcode-API angesehen? Es hat einige sehr mächtige Werkzeuge, um so viele Array-Elemente hinzuzufügen, wie Sie möchten, und legen Sie den Shortcode irgendwo auf Ihrer Site ab.

Hier ist eine kleine Demo von dem, was Sie tun können:

 function create_shortcode( $atts, $content = null ) { $a = shortcode_atts( array( 'sauna' => 'attribute1', 'parking' => 'attribute 2 default', 'natural' => 'attribute 2 default', 'food' => 'attribute 2 default' ), $atts ); foreach ( $a as $key => $value ) { echo '' . $value . "
"; } } add_shortcode( 'japan', 'create_shortcode');

[japan class="headline"]asdf[/japan] nun diesen Shortcode zu verwenden, geben Sie einfach diesen Text [japan class="headline"]asdf[/japan] und es wird eine Spalte mit Checkboxen erzeugt. Nicht schön, aber sollte dich in die richtige Richtung bringen.

Ich hatte kürzlich ein ähnliches Problem. Ich triggerse es, indem ich jedem Kontrollkästchen einen eindeutigen value (SQL-Zeilen-ID, Seiten- / Post-ID usw.) gab, den Sie wahrscheinlich selbst setzen müssen, und wenn der Benutzer bestimmte prüft, werden diese markierten Kästchen an eine SQL-Zeile gesendet. name="onsen_boxes[]" Sie sicher, dass das name Attribut in den Kontrollkästchen auf name="onsen_boxes[]" (um diese Kontrollkästchen-Einträge als ein Array zu speichern), dann tun Sie etwas wie name="onsen_boxes[]" :

 function collect_checkbox_IDs() { if (!isset( $_POST['onsen_boxes'])) { return; } $checkboxIdArray = array(); foreach ( $_POST['onsen_boxes'] as $key) { $checkboxIdArray [] = $key; } return json_encode( $checkboxIdArray ); } 

Dies nimmt die Felder, die der Benutzer ausgewählt hat, und wandelt sie in ein JSON-kodiertes Array um. Wenn Sie die Werte in diesem neuen Array verwenden möchten, können Sie einfach echo json_decode($checkboxIdArray) , um die einzelnen vom Benutzer ausgewählten Elemente abzurufen.