带有定制字段过滤器的PHP页面

时间:2022-02-13 作者:Wordprez

例如,我为我的帖子创建了几个自定义字段,并且我创建了一些页面,在这些页面中,我只按1个字段的值对它们进行筛选

字段名称:近似值:城市名称

我已经创建了一个php模板页面,我将其放在我的主题文件夹中,该文件夹具有查询功能,可以显示具有特定城市名称的所有帖子。

现在,我想创建一个搜索位置,其中包含所有城市名称,并在用户开始键入时向其建议,然后用户可以选择城市名称和一个或两个其他自定义字段过滤器。我知道如何创建它,但我不知道如何将过滤器传递到定制php页面模板。

我想通过\\u GET或\\u POST发送过滤器,以更方便的方式发送到主题文件夹中新创建的php。如何正确地将值发送到该页面,以便在那里访问值并使用过滤器创建wp查询?

1 个回复
SO网友:Vladimir

我将分享我如何使用Wordpress开箱即用功能和ACF, 没有自定义PHP 有问题的脚本。

  1. Creating a custom post type
  2. Adding a custom field to the custom post type
  3. Creating the search form
  4. Outputting the search results

Custom Post Type:
第一步相对容易,在functions.php 文件或其他地方:

资源:
https://www.codexworld.com/wordpress-custom-post-types-without-plugin/


  function product_init() {
        $labels = array(
            \'name\' => \'Products\',
            \'singular_name\' => \'Product\',
            \'add_new\' => \'Add New Product\',
            \'add_new_item\' => \'Add New Product\',
            \'edit_item\' => \'Edit Product\',
            \'new_item\' => \'New Product\',
            \'all_items\' => \'All Products\',
            \'view_item\' => \'View Product\',
            \'search_items\' => \'Search Products\',
            \'not_found\' =>  \'No Products Found\',
            \'not_found_in_trash\' => \'No Products found in Trash\',
            \'parent_item_colon\' => \'\',
            \'menu_name\' => \'Products\',
        );
    
        $args = array(
            \'labels\' => $labels,
            \'public\' => true,
            \'has_archive\' => true,
            \'show_ui\' => true,
            \'capability_type\' => \'post\',
            \'hierarchical\' => false,
            \'rewrite\' => array(\'slug\' => \'product\'),
            \'query_var\' => true,
            \'menu_icon\' => \'dashicons-randomize\',
            \'supports\' => array(
                \'title\',
                \'editor\',
                \'excerpt\',
                \'trackbacks\',
                \'custom-fields\',
                \'comments\',
                \'revisions\',
                \'thumbnail\',
                \'author\',
                \'page-attributes\'
            )
        );
        register_post_type( \'product\', $args );
        register_taxonomy(\'product_category\', \'product\', array(\'hierarchical\' => true, \'label\' => \'Category\', \'query_var\' => true, \'rewrite\' => array( \'slug\' => \'product-category\' )));
    }
    
    add_action( \'init\', \'product_init\' );

Custom fields:
创建自定义字段时不使用ACF 比我想象的要复杂,请改用高级自定义字段插件,并创建一个应用于\'Type of Content\' &燃气轮机;\'Product\' - 或者您的自定义帖子类型。创建“城市”等字段。


Search form:
创建一个名为searchform.php 在模板的文件夹中,它将包含<form>:

<form id="searchform" method="get" action="<?php echo esc_url( home_url( \'/\' ) ); ?>">
    <input type="text" class="search-field" name="s" placeholder="Search" value="<?php echo get_search_query(); ?>">
    <input type="hidden" name="post_type[]" value="product" />
    <input type="submit" value="Search">
</form>
资源:
https://wordpress.stackexchange.com/a/17119/219065
https://artisansweb.net/create-custom-search-form-wordpress/



Results:
search.php 文件,我执行以下代码:

$args = array(
    \'post_type\'  => \'product\',
    \'meta_query\' => array(
        array( \'key\' => \'city\', \'value\' => \'Moscow\', \'meta_compare\' => \'LIKE\' ),
        array( \'key\' => \'city\', \'value\' => array(\'Edinburgh\', \'Moscow\'), \'meta_compare\' => \'IN\' ),
        \'relation\' => \'OR\'
    )
);

$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) : $the_query->the_post();
        echo get_the_title();
    endwhile;
} else {
 echo "No posts";
}

wp_reset_postdata();
资源:
https://www.smashingmagazine.com/2016/03/advanced-wordpress-search-with-wp_query/
https://rudrastyh.com/wordpress/meta_query.html
Meta_query compare operator explanation

后记。您将不得不调整和调整大部分代码,因为它当然不准备处理您将要使用搜索功能的所有情况。我发现代码中的许多元素都是不必要和不完整的(查看参考资料了解更多信息),但它只是一个示例,希望对您有所帮助。