根据 ACF Repeater 文本输入选择填充 Select 字段
Populate Select Field based on ACF Repeater Text Input Choice
我正在为此苦苦挣扎,需要一些帮助。我有一个名为“gas_grades”的 ACF 转发器,在该转发器中我有两个字段:
第一个字段是“成绩”,是一个文本字段。
第二个字段是“大小”,是一个带有文本字段的转发器字段。
所以,对于个人 post 我可以添加气体等级和尺寸。 5.5、6、6.5、7 等
我在这里试图完成的是循环遍历表格 select 字段中的成绩,并根据成绩 select 在下拉列表中编辑将显示该特定成绩的尺码在第二个下拉菜单中。
下图展示了我的字段组的当前布局。
中继器(气体等级)
文本字段(等级)
中继器(尺寸)
文本字段(大小)
末端中继器(等级)
末端中继器(气体等级)
这是用于显示数据的基本转发器循环:
@if( have_rows('gas_grades') )
@while( have_rows('gas_grades') )
<?php
the_row();
$grade = get_sub_field('grade');
?>
<option value="">{{ $grade }}</option>
@if( have_rows('size') )
@while( have_rows('size') )
<?php
the_row();
$size = get_sub_field('size');
?>
<option value="">{{ $size }}</option>
@endwhile
@endif
@endwhile
@endif
当然,这是当前输出:
因此,5.5、6 和 6.5 将列在第一个 select 下拉列表中,然后它们的子中继器字段将列在第二个下拉列表中。
您可以使用 JQuery
来做到这一点。
首先,您必须创建两个单独的下拉菜单。
Create a dropdown for only grades
.
if( have_rows('grades') ): ?>
<select id="grades">
<?php while( have_rows('grades') ) : the_row(); $grade = get_sub_field('grade'); ?>
<option value="<?php echo $grade; ?>"><?php echo $grade; ?></option>
<?php endwhile; ?>
</select>
<?php else : endif; ?>
Create dropdown for only sizes
but with using data
attr. add a
grade in data attr called `data-group.
<?php if( have_rows('grades') ): ?>
<select id="sizes">
<?php while( have_rows('grades') ) : the_row();
$grade = get_sub_field('grade');
if( have_rows('sizes') ): while( have_rows('sizes') ) : the_row();
$size = get_sub_field('size'); ?>
<option data-group="<?php echo $grade; ?>" value="<?php echo $size; ?>"><?php echo $size; ?></option>
<?php endwhile; ?>
<?php else : endif;
endwhile; ?>
</select>
<?php else : endif; ?>
现在您需要在 grade
更改事件中根据等级 select 过滤尺码下拉列表。
<script type="text/javascript">
(function($){
$('#grades').on('change', function(){
var grade = $(this).val();
var size = $('#sizes');
var i = 1;
$('option', size).filter(function(){
if ( $(this).attr('data-group') === grade ) {
$(this).show();
if( i == 1 ){
$("#sizes").val($(this).val());
}
i++;
} else {
$(this).hide();
}
});
});
$('#grades').trigger('change');
})(jQuery);
</script>
$('#grades').on('change', function(){
var grade = $(this).val();
var size = $('#sizes');
var i = 1;
$('option', size).filter(function(){
if ( $(this).attr('data-group') === grade ) {
$(this).show();
if( i == 1 ){
$("#sizes").val($(this).val());
}
i++;
} else {
$(this).hide();
}
});
});
$('#grades').trigger('change');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="grades">
<option value="5.5">5.5</option>
<option value="6">6</option>
<option value="6.5">6.5</option>
</select>
<select id="sizes">
<option data-group="5.5" value="44L/ Size 200 : 55 lbs">44L/ Size 200 : 55 lbs</option>
<option data-group="5.5" value="265 AL : 60/40 lbs">265 AL : 60/40 lbs</option>
<option data-group="5.5" value="150 AL : 28 lbs ">150 AL : 28 lbs </option>
<option data-group="6" value="45L/ Size 200 : 55 lbs">45L/ Size 200 : 55 lbs</option>
<option data-group="6" value="270 AL : 60/40 lbs">270 AL : 60/40 lbs</option>
<option data-group="6" value="200 AL : 28 lbs ">200 AL : 28 lbs </option>
<option data-group="6.5" value="50L/ Size 200 : 55 lbs">50L/ Size 200 : 55 lbs</option>
<option data-group="6.5" value="300 AL : 60/40 lbs">300 AL : 60/40 lbs</option>
<option data-group="6.5" value="200 AL : 28 lbs ">200 AL : 28 lbs </option>
</select>
我正在为此苦苦挣扎,需要一些帮助。我有一个名为“gas_grades”的 ACF 转发器,在该转发器中我有两个字段:
第一个字段是“成绩”,是一个文本字段。 第二个字段是“大小”,是一个带有文本字段的转发器字段。
所以,对于个人 post 我可以添加气体等级和尺寸。 5.5、6、6.5、7 等
我在这里试图完成的是循环遍历表格 select 字段中的成绩,并根据成绩 select 在下拉列表中编辑将显示该特定成绩的尺码在第二个下拉菜单中。
下图展示了我的字段组的当前布局。
中继器(气体等级) 文本字段(等级) 中继器(尺寸) 文本字段(大小) 末端中继器(等级) 末端中继器(气体等级)
这是用于显示数据的基本转发器循环:
@if( have_rows('gas_grades') )
@while( have_rows('gas_grades') )
<?php
the_row();
$grade = get_sub_field('grade');
?>
<option value="">{{ $grade }}</option>
@if( have_rows('size') )
@while( have_rows('size') )
<?php
the_row();
$size = get_sub_field('size');
?>
<option value="">{{ $size }}</option>
@endwhile
@endif
@endwhile
@endif
当然,这是当前输出:
因此,5.5、6 和 6.5 将列在第一个 select 下拉列表中,然后它们的子中继器字段将列在第二个下拉列表中。
您可以使用 JQuery
来做到这一点。
首先,您必须创建两个单独的下拉菜单。
Create a dropdown for only
grades
.
if( have_rows('grades') ): ?>
<select id="grades">
<?php while( have_rows('grades') ) : the_row(); $grade = get_sub_field('grade'); ?>
<option value="<?php echo $grade; ?>"><?php echo $grade; ?></option>
<?php endwhile; ?>
</select>
<?php else : endif; ?>
Create dropdown for only
sizes
but with usingdata
attr. add a grade in data attr called `data-group.
<?php if( have_rows('grades') ): ?>
<select id="sizes">
<?php while( have_rows('grades') ) : the_row();
$grade = get_sub_field('grade');
if( have_rows('sizes') ): while( have_rows('sizes') ) : the_row();
$size = get_sub_field('size'); ?>
<option data-group="<?php echo $grade; ?>" value="<?php echo $size; ?>"><?php echo $size; ?></option>
<?php endwhile; ?>
<?php else : endif;
endwhile; ?>
</select>
<?php else : endif; ?>
现在您需要在 grade
更改事件中根据等级 select 过滤尺码下拉列表。
<script type="text/javascript">
(function($){
$('#grades').on('change', function(){
var grade = $(this).val();
var size = $('#sizes');
var i = 1;
$('option', size).filter(function(){
if ( $(this).attr('data-group') === grade ) {
$(this).show();
if( i == 1 ){
$("#sizes").val($(this).val());
}
i++;
} else {
$(this).hide();
}
});
});
$('#grades').trigger('change');
})(jQuery);
</script>
$('#grades').on('change', function(){
var grade = $(this).val();
var size = $('#sizes');
var i = 1;
$('option', size).filter(function(){
if ( $(this).attr('data-group') === grade ) {
$(this).show();
if( i == 1 ){
$("#sizes").val($(this).val());
}
i++;
} else {
$(this).hide();
}
});
});
$('#grades').trigger('change');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="grades">
<option value="5.5">5.5</option>
<option value="6">6</option>
<option value="6.5">6.5</option>
</select>
<select id="sizes">
<option data-group="5.5" value="44L/ Size 200 : 55 lbs">44L/ Size 200 : 55 lbs</option>
<option data-group="5.5" value="265 AL : 60/40 lbs">265 AL : 60/40 lbs</option>
<option data-group="5.5" value="150 AL : 28 lbs ">150 AL : 28 lbs </option>
<option data-group="6" value="45L/ Size 200 : 55 lbs">45L/ Size 200 : 55 lbs</option>
<option data-group="6" value="270 AL : 60/40 lbs">270 AL : 60/40 lbs</option>
<option data-group="6" value="200 AL : 28 lbs ">200 AL : 28 lbs </option>
<option data-group="6.5" value="50L/ Size 200 : 55 lbs">50L/ Size 200 : 55 lbs</option>
<option data-group="6.5" value="300 AL : 60/40 lbs">300 AL : 60/40 lbs</option>
<option data-group="6.5" value="200 AL : 28 lbs ">200 AL : 28 lbs </option>
</select>