Usando uma lista de verificação para pesquisar metadados

Estou completamente preso e gostaria muito de apontar / aconselhar.

O problema : eu quero criar uma function de pesquisa que me permita filtrar onsen japonês por suas amenidades, por exemplo, estacionamento, sauna, banho de rocha, etc., que são armazenados como metadados no post (uma lista de verificação).

Registrei essas amenidades como uma lista de verificação de metadados na postagem com o seguinte código:

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; } 

Este código me dá a lista de verificação no back-end e então posso verificar facilmente as checkboxs relevantes para um dado onsen. Eu entendo que eu preciso criar um formulário de usuário do front-end com uma lista de verificação de todas as amenidades, mas não sei como criar os $ args para o WP_Query em uma página de pesquisa personalizada porque, como é uma lista de verificação, pode haver múltiplas ou sem pontos de dados para pegar … Qualquer ajuda seria muito apreciada.

Solutions Collecting From Web of "Usando uma lista de verificação para pesquisar metadados"

Você examinou a API do shortcode? Possui algumas ferramentas muito poderosas para adicionar tantos itens de matriz quanto você quiser, e coloque o código curto em qualquer lugar em seu site.

Aqui está uma demonstração pequena do que você poderia fazer:

 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');

Agora, para utilizar este shortcode, entre neste texto [japan class="headline"]asdf[/japan] e ele irá produzir uma coluna de checkboxs de seleção. Não é bonito, mas deve levá-lo na direção certa.

Recentemente tive um problema semelhante. Eu resolvi, dando a cada checkbox de seleção um value exclusivo (identificação de linha SQL, ID de página / postagem, etc.) que você provavelmente terá que configurar, e quando o usuário verifica certas, essas checkboxs verificadas são enviadas para uma linha SQL. Certifique-se de ter o atributo de name nas checkboxs de seleção definidas para name="onsen_boxes[]" (para armazenar essas inputs de checkboxs de seleção como uma matriz), então faça algo como isto:

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

Isso levará os campos que o usuário selecionou e os transformará em uma matriz codificada JSON. Quando você quer usar os valores nesta nova matriz, você pode fazer o echo json_decode($checkboxIdArray) para recuperar os itens individuais selecionados pelo usuário.