Wordpress搜索表单和搜索结果通过自定义分类中的ACF字段

时间:2017-01-18 10:27:14

标签: php wordpress woocommerce wordpress-theming advanced-custom-fields

所以我觉得我为自己的生活变得艰难。

我的网站上有一个搜索字段,我已将其拆分为3个,例如:

<input type="text" name="part1" />
<input type="text" name="part2" />
<input type="text" name="part3" />

在我的结果页面上,我创建了搜索字符串,例如:

$searchstring = $part1.'-'.$part2.'-'.$part3;

然后,该过程将在数据库中搜索值为$searchstring

的自定义字段

我在那里找到了一个搜索功能https://gist.github.com/jserrao/d8b20a6c5c421b9d2a51,我认为它与我想要实现的目标非常接近,但我不确定如何实现所有内容。

我的数据大致如下:

(taxonomy) product_cat - (name) Category 1 - (custom field) gc_number - (value I need to search) 77-999-77
(taxonomy) product_cat - (name) Category 2 - (custom field) gc_number - (value I need to search) 73-333-73
(taxonomy) product_cat - (name) Category 3 - (custom field) gc_number - (value I need to search) 76-666-76

然后我需要向用户显示product_cat名称。

希望这有一定道理,非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

来自ACF文档

$posts = get_posts(array(
    'numberposts'   => -1,
    'post_type'     => 'post',
    'meta_key'      => 'color',
    'meta_value'    => 'red'
));

此示例显示查找所有帖子的参数,其中名为“color”的自定义字段的值为“red”。在您的情况下,您应该将gc_number用于meta_key,将$searchstring用于meta_value。然后,您可以使用get_the_terms()来定义帖子所属的类别字词。

答案 1 :(得分:-1)

我在Stack Exchange上提出了这个问题 - Wordpress Development并得到了Kieran McClung的精彩回答。他的回答非常适合我,并在下面复制。

<form role="search" method="get" id="acf-search" action="<?php site_url(); ?>">
...

<input type="text" name="part1" />
<input type="text" name="part2" />
<input type="text" name="part3" />

<input type="submit" value="Search" />
</form>


<?php
// Results page

// Might be worth checking to make sure these exist before doing the query.
$part_1 = $_GET['part1'];
$part_2 = $_GET['part2'];
$part_3 = $_GET['part3'];
$search_string = $part_1 . '-' . $part_2 . '-' . $part_3;

// Get all product categories
$categories = get_terms( 'product_cat' );
$counter = 0;

// Loop through categories
foreach ( $categories as $category ) {

    // Get custom field
    $gc_number = get_field( 'gc_number', $category );

    // If field matches search string, echo name
    if ( $gc_number == $search_string ) {
        // Update counter for use later
        $counter++;
        echo $category->name;
    }
}

// $counter only increases if custom field matches $search_string.
// If still 0 at this point, no matches were found.
if ( $counter == 0 ) {
    echo 'Sorry, no results found';
}
?>