使用核对表对元数据进行搜索

时间:2016-10-15 作者:Gecko Boy

我完全被困住了,如果能给我一些建议,我将不胜感激。

The problem: 我想创建一个搜索功能,让我可以根据日本人的便利设施筛选他们,例如停车场、桑拿、基岩浴等,这些设施作为元数据存储在帖子中(一个清单)。

我已在帖子中将这些便利设施注册为元数据检查表,代码如下:

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;
}
这段代码在后端为我提供了检查表,因此我可以轻松地检查给定onsen的相关框。我知道我需要创建一个包含所有便利设施清单的前端用户表单,但我不知道如何在自定义搜索页面上为WP\\U查询创建$args,因为这是一个清单,可能需要获取多个或没有数据点。。。任何帮助都将不胜感激。

2 个回复
SO网友:sarcastasaur

你调查过shortcode API? 它有一些非常强大的工具,可以添加任意数量的数组项,并将短代码放在站点的任何位置。

以下是您可以做的一个小演示:

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 \'<input type="checkbox" value="\' . esc_attr($key) . \'"\' . $key. \'>\' . $value . "<br>";
    }

  }

add_shortcode( \'japan\', \'create_shortcode\');
现在要使用此短代码,只需输入以下文本[japan class="headline"]asdf[/japan] 它将生成一列复选框。不太漂亮,但应该会让你走上正确的方向。

SO网友:sarcastasaur

我最近也有类似的问题。我通过给每个复选框一个唯一的value (SQL行ID、页面/帖子ID等),您可能必须自行设置,当用户选中某些复选框时,这些复选框将发送到SQL行。确保name 复选框上的属性设置为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 );
}
这将获取用户选择的字段,并将它们转换为JSON编码的数组。如果要使用此新数组中的值,只需执行以下操作echo json_decode($checkboxIdArray) 检索用户选择的单个项目。

相关推荐

nothing happen in search form

我想创建搜索表单,但当我搜索时什么都没有发生,这是代码:索引。php: <div class=\"tech-btm\"> <?php get_search_form();?> </div> 搜索表单:<form role=\"search\" method=\"get\" id=\"searchform\" action=\"<?php echo home_url(\'/\')?>\"> &