我知道标题不是很吸引人,但我很难找到合适的术语来描述它。
我的目标是建立一个以字母数字顺序列出所有帖子的页面。像一个词汇表。 A-Z 0-9。
我的问题是我有一个自定义查询来输出自定义post-type的结果。到现在为止还挺好。
我还有一个修改过的where子句连接到posts_where
// adds a new parameter for WP_QUERY ('starts_with' => $_POST['letter']
function query_starts_with( $where, $query ) {
global $wpdb;
$starts_with = $query->get( 'starts_with' );
if ( $starts_with ) {
$where .= " AND $wpdb->posts.post_title LIKE '$starts_with%'";
}
return $where;
}
add_filter( 'posts_where', 'query_starts_with', 10, 2 );
所以我这样查询:
<?php
$args = array(
'post_type' => 'lexikon',
'post_status' => 'publish',
'starts_with' => $letter
);
$qry = new WP_Query( $args );
?>
现在,我在帖子类型中只有一个帖子,以“T”开头。
我通过A-Z中的一组字母和0-9中的数字循环遍历所有患病的角色,合并在一起。
$a = range('a', 'z');
$b = range('0', '9');
$letters_arr = array_merge($a, $b);
所以我一起循环使用我的自定义循环:
<?php foreach ($letters_arr as $letter) : ?>
<?php
$args = array(
'post_type' => 'lexikon',
'post_status' => 'publish',
'starts_with' => $letter
);
$qry = new WP_Query( $args );
?>
<?php if ( $qry->have_posts() ) : ?>
<?php while ( $qry->have_posts() ) : $qry->the_post(); ?>
<?php echo strtoupper( $letter ); ?>
<p><?php echo get_the_title(); ?></p>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
这让我得到了结果:
T Testtitle
0 Testtitle
总而言之,出于某种原因,以“T”开头的帖子也被视为以“0”(零)开头,我不明白为什么。
你能告诉我,这是什么导致了这个问题?
答案 0 :(得分:2)
字符串&#39; 0&#39;转换为布尔值false,如manual中所示。因此,你不能在字母“&#39; 0”之后附上你的where子句。只需更改您的if:
if ( $starts_with ) {
为:
if ( $starts_with !== false ) {