web-dev-qa-db-ja.com

数字で始まる投稿名を取得するためのカスタムクエリ

カスタム投稿タイプのA-Zインデックスを実装しています。私は私のリンクがページを印刷し、手紙のために働く質問を持っています。しかし、私は彼らが全く同じように動作したくないので、数字は私をつまずかせています。最初のリンクに「0-9」と表示してクリックすると、数字で始まるすべての投稿が表示されます。

ワイルドカードがその答えだと思いますが、それは私が期待するようには機能していません。これが私のfunctions.phpからの私の関数です:

function test_first_letter( $sql ){
  global $wpdb;
  $first_letter = get_query_var( 'first_letter' );
  if( $first_letter ){
   if( $first_letter == 'num') :
     $sql .= $wpdb->prepare( " AND $wpdb->posts.post_name LIKE %s ", '5%');
   else:
     $sql .= $wpdb->prepare( " AND $wpdb->posts.post_name LIKE %s ", $first_letter.'%' );
   endif;
  }
  return $sql;
}
add_action( 'posts_where', 'test_first_letter' );

$first_letterクエリパラメータが 'num'と等しい場合、クエリは番号post_namesで始まるすべての0-9を探すようにします。しかし、これはうまくいきません。

$sql .= $wpdb->prepare( " AND $wpdb->posts.post_name LIKE %s ", '[0-9]*');

Post_nameが0から9の任意の数字で始まるすべての投稿を取得するにはどうすればよいですか。

4
NatalieMac

あなたは*を持っていて+を持っていないので@RolandoMySQLDBAによって与えられた解決策はあなたにすべての投稿を与えるでしょう。 *は0個以上の一致を返すことを意味しますが、これはあなたが望むことではありません。この場合、実際にはどちらも必要ありませんが、最初の文字と一致させるためだけに使用します。これを試して:

$sql .= $wpdb->prepare( " AND $wpdb->posts.post_name REGEXP '^[0-9]'");

2
Dan