我使用php代码显示特定父页面ID中的子页面,以显示选择列表类型中的页面链接。
我的所有子页面都有一个名为" artiste"的子字段,带有艺术家名称。
这是我的PHP代码,用于显示带有页面链接的页面名称:
<?php
$args = array(
'post_type' => 'page',
'posts_per_page' => -1,
'post_parent' => '22',
'order' => 'ASC',
'orderby' => 'title'
);
$parent = new WP_Query( $args );
if ( $parent->have_posts() ) : ?>
<div class="styled-select">
<select name="" onchange="location = this.options[this.selectedIndex].value;">
<?php while ( $parent->have_posts() ) : $parent->the_post(); ?>
<option value="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></option>
<?php endwhile; ?>
</select>
</div>
<?php endif; wp_reset_query(); ?>
这很好用,我得到所有子页面标题和固定链接并按字母顺序排序。
现在我想获取页面标题,而不是每个子页面的自定义字段,这是我的代码: 我的自定义字段是&#34; the_sub_field(&#39; nom_artiste&#39;);&#34;
$args = array(
'post_type' => 'page',
'posts_per_page' => -1,
'post_parent' => '22',
'order' => 'ASC',
'orderby' => 'title'
);
$parent = new WP_Query( $args );
if ( $parent->have_posts() ) : ?>
<div class="styled-select">
<select name="" onchange="location = this.options[this.selectedIndex].value;">
<option>--- A - Z ---</option>
<?php while ( $parent->have_posts() ) : $parent->the_post(); ?>
<option value="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php if(get_field('artiste')): while (has_sub_field('artiste') ): ?><?php the_sub_field('nom_artiste'); ?><?php endwhile; endif; ?></option>
<?php endwhile; ?>
</select>
</div>
<?php endif; wp_reset_query(); ?>
它也有效,我得到自定义字段而不是页面标题,以及我的页面标题的永久链接,这是完美的。
但是在第二个代码中,我的自定义字段根据页面标题进行排序。
例如,我有2页:
AAAAA
ZZZZZ
和自定义字段:
表示AAAA:自定义字段为GGGG
表示ZZZZ:自定义字段为BBBB
所以使用第二个PHP代码,我的列表没有正确排序,因为它排序取决于页面标题而不是自定义字段...我得到:
GGGG
BBBB
我认为我必须使用我的自定义字段创建一个数组,以便在我的select onchange中显示它们之前按字母顺序对它们进行排序,但我不知道该怎么做...
任何人都可以帮我这个吗?
非常感谢你的帮助
答案 0 :(得分:0)
尝试此操作,替换代码中<?php while ... endwhile; ?>
之间的所有内容:
<?php
//Declare an array to hold data
$options = array();
//The loop
while ( $parent->have_posts() ) : $parent->the_post();
//Define a temporary array
$option = array();
//Get all the values we need and store them in an array.
$option['value'] = get_permalink();
$option['title'] = get_the_title();
if(get_field('artiste')):
while (has_sub_field('artiste') ) {
$option['label'] = get_sub_field('nom_artiste');
}
else:
$option['label'] = get_the_title(); //Put something here if artiste is not populated.
endif;
$options[] = $option;
endwhile;
//Sort the array on the 'label' field
usort($options, function($a, $b) { return strcmp($a['label'], $b['label']); });
//Output the <option> tags
$format = ' <option value="%s" title="%s">%s</option>'."\n";
foreach ($options as $o) {
printf($format, $o['value'], $o['title'], $o['label']);
}
?>