对于一个glossar页面的Wordpress LIKE查询得到错误的结果

时间:2018-06-04 19:12:11

标签: php mysql wordpress

我知道标题不是很吸引人,但我很难找到合适的术语来描述它。

我的目标是建立一个以字母数字顺序列出所有帖子的页面。像一个词汇表。 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”(零)开头,我不明白为什么。

你能告诉我,这是什么导致了这个问题?

1 个答案:

答案 0 :(得分:2)

字符串&#39; 0&#39;转换为布尔值false,如manual中所示。因此,你不能在字母“&#39; 0”之后附上你的where子句。只需更改您的if:

if ( $starts_with ) {

为:

if ( $starts_with !== false ) {