如何在前端使用 Select 通过 ACF 字段 运行 Wordpress 查询
How to run Wordpress Query by ACF field using Select on front-end
基本上我想做的是在前端创建过滤器,这样用户就可以通过特定的 ACF 字段过滤所有帖子。
有一个猫舍网站,主人需要在新一代小猫到来时添加新窝。我已经为这个新的字段组创建了选项页面,并创建了一个带有文本的转发器字段,这样我就可以添加带有垃圾名称的新行,我想稍后过滤。
我已经包含了转发器字段的基本循环:
<select name="litter" id="litter">
<?php
if( have_rows('cat-litters', 'option') ):
while ( have_rows('cat-litters', 'option') ) : the_row(); ?>
<option value="<?php the_sub_field('new-litter', 'option'); ?>"><?php the_sub_field('new-litter', 'option'); ?></option>
<?php endwhile;
else :
endif;
?>
</select>
目前正在运行:
我将在猫的帖子中添加一个名为 cat-litter 的字段,这样我就可以找到带有猫砂“02”的特定帖子。
但现在我坚持使用这个 select 从前端到 运行 查询来显示合适的帖子。
我在 index.php of twentytwentyone child-theme btw 工作。
是否需要重新加载页面并不重要(但是,如果 ajax 方式不复杂,我将非常感激)但我必须指出它需要使用分页,我已经设置了 pre_get_posts 每页显示 9 个帖子(3x3 网格)。
根据 ACF 文档从本页的 Dynamic $_GET parameters
部分获取和修改:https://www.advancedcustomfields.com/resources/query-posts-custom-fields/
function my_pre_get_posts( $query ) {
// do not modify queries in the admin
if( is_admin() ) {
return $query;
}
// only modify queries for 'cat' post type
if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'cat' ) {
// allow the url to alter the query
if( isset($_GET['cat-litter']) ) {
$query->set('meta_key', 'cat-litter');
$query->set('meta_value', $_GET['cat-litter']);
}
}
// return
return $query;
}
add_action('pre_get_posts', 'my_pre_get_posts');
然后在前端使用 'cat-litter' 从下拉列表中重新加载页面可以使用 jQuery:
<script>
$('select#litter').on('change', function() {
window.location.href = "www.website.com/cats?cat-litter=" + $(this).val();
});
</script>
基本上我想做的是在前端创建过滤器,这样用户就可以通过特定的 ACF 字段过滤所有帖子。
有一个猫舍网站,主人需要在新一代小猫到来时添加新窝。我已经为这个新的字段组创建了选项页面,并创建了一个带有文本的转发器字段,这样我就可以添加带有垃圾名称的新行,我想稍后过滤。
我已经包含了转发器字段的基本循环:
<select name="litter" id="litter">
<?php
if( have_rows('cat-litters', 'option') ):
while ( have_rows('cat-litters', 'option') ) : the_row(); ?>
<option value="<?php the_sub_field('new-litter', 'option'); ?>"><?php the_sub_field('new-litter', 'option'); ?></option>
<?php endwhile;
else :
endif;
?>
</select>
目前正在运行:
我将在猫的帖子中添加一个名为 cat-litter 的字段,这样我就可以找到带有猫砂“02”的特定帖子。
但现在我坚持使用这个 select 从前端到 运行 查询来显示合适的帖子。 我在 index.php of twentytwentyone child-theme btw 工作。
是否需要重新加载页面并不重要(但是,如果 ajax 方式不复杂,我将非常感激)但我必须指出它需要使用分页,我已经设置了 pre_get_posts 每页显示 9 个帖子(3x3 网格)。
根据 ACF 文档从本页的 Dynamic $_GET parameters
部分获取和修改:https://www.advancedcustomfields.com/resources/query-posts-custom-fields/
function my_pre_get_posts( $query ) {
// do not modify queries in the admin
if( is_admin() ) {
return $query;
}
// only modify queries for 'cat' post type
if( isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'cat' ) {
// allow the url to alter the query
if( isset($_GET['cat-litter']) ) {
$query->set('meta_key', 'cat-litter');
$query->set('meta_value', $_GET['cat-litter']);
}
}
// return
return $query;
}
add_action('pre_get_posts', 'my_pre_get_posts');
然后在前端使用 'cat-litter' 从下拉列表中重新加载页面可以使用 jQuery:
<script>
$('select#litter').on('change', function() {
window.location.href = "www.website.com/cats?cat-litter=" + $(this).val();
});
</script>