カスタム投稿タイプの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の任意の数字で始まるすべての投稿を取得するにはどうすればよいですか。
あなたは*
を持っていて+
を持っていないので@RolandoMySQLDBAによって与えられた解決策はあなたにすべての投稿を与えるでしょう。 *
は0個以上の一致を返すことを意味しますが、これはあなたが望むことではありません。この場合、実際にはどちらも必要ありませんが、最初の文字と一致させるためだけに使用します。これを試して:
$sql .= $wpdb->prepare( " AND $wpdb->posts.post_name REGEXP '^[0-9]'");