按自定义域的第一个字母筛选自定义WP_QUERY-希望使用Search和Filter Pro?

时间:2018-08-13 作者:user2115227

我有一个自定义WP\\U查询,它可以非常简单地过滤自定义帖子类型:

<?php $query = new WP_Query( 
  array( 
      \'post_type\' => \'professionals\',
      \'search_filter_id\'  => \'204\'
  ) );
?>
输出如下所示:

<div id="results">  
<?php if ( $query->have_posts() ) : ?>

<?php while ( $query->have_posts() ) : $query->the_post(); ?>  

                    <div class="col-md-3">
                            <div class="flip-container" ontouchstart="this.classList.toggle(\'hover\');">
                                <div class="flipper">
                                    <div class="front">
                                        <img src="<?php the_field(thumbnail_image);?>">
                                    </div>
                                    <div class="back">
                                        <h2><?php the_title(); ?></h2>
                                        <h4 class="flip-bottom"><?php the_field(\'position\'); ?><br><?php the_field(\'telephone\'); ?></h4>
                                    </div>
                                </div>
                            </div>

                            <div class="pro-meta"><?php the_title(); ?><br>
                            <?php the_field(\'position\'); ?></div>
                    </div>

<?php endwhile; wp_reset_postdata(); ?>

<?php else : ?>
No results
<?php endif; ?>
</div>
这输出完全符合我的要求(悬停时有翻转动画,但忽略该位!)。

然后,我使用Search and Filter Pro为一些自定义字段添加筛选下拉列表:Practice、Position+Law School。这些字段通过高级自定义字段Pro添加到帖子类型。

这将通过ajax更新WP\\u查询,更新#results容器结果。这也很有效。

但是,我还想按自定义字段的第一个字母过滤查询。我附上了一个我想编码的过滤器的截图。。。

它基本上是字母表中的所有字母,单击其中一个字母,它会更新WP\\u查询以过滤结果(使用Ajax),只显示姓氏第一个字母匹配的字母。因此,如果我单击“D”,它将显示以D开头的姓氏的结果。“姓氏”也是在帖子类型中设置的自定义字段。

image

我认为这在Search and Filter Pro插件中是不可能的(?)因此,可能正在寻找一种编码到归档后类型中的解决方案。php文件,但这仍然适用于已经存在的插件过滤器!

谢谢:)

1 个回复
SO网友:Andrius Vlasovas

如果Search and Filter Pro不能提供现成的帮助,那么要实现这一点需要付出更多的努力。

我会做什么:

将查询移动到将保留在函数中的单独函数。php文件。它将返回查询结果(下面的示例)。

function theme_prefix_return_professionals($type = \'professionals\', $fid = \'204\') {

    $letter = \'\';

    $post_type = $type;
    $filter_id = $fid;

    $args = array( 
        \'post_type\' => $post_type,
        \'post_status\' => \'publish\',
        \'search_filter_id\'  => $filter_id
    );



    $query = new WP_Query($args);

    return $query;

}
在ajax\\u priv和ajax\\u no\\u priv中钩住此函数。

有一个jQuery函数来触发字母单击并传递字母的函数(该函数需要为此进行扩展,还需要使用一些最佳实践,如nonce检查等)。

一旦在jQuery的帮助下触发了操作,我们将向$args添加新参数,因此函数将扩展到如下内容:

function theme_prefix_return_professionals($type = \'professionals\', $fid = \'204\') {

    $letter = \'\';

    $post_type = $type;
    $filter_id = $fid;

    $args = array( 
        \'post_type\' => $post_type,
        \'post_status\' => \'publish\',
        \'search_filter_id\'  => $filter_id
    );


    if ($_POST[\'letter\']) {

        $letterVal = \'^\' . $_POST[\'letter\'];

        $args[\'meta_query\'][] = array(
            \'key\'       => \'proffesional_surename\',
            \'value\'     => $letterVal,
            \'compare\'   => \'REGEXP\',
        );
    }


    $query = new WP_Query($args);

    return $query;

}
然后,我们用返回的查询数据更新div(很可能返回为JSON)。

这方面还有很多问题,比如安全问题(转义值、添加和检查nonce、返回JSON),但这需要我为您解决这个问题并花上一个小时。

希望我能帮助你自己解决这个问题,这会让你知道如何解决这个问题。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post