Benutzerdefinierte Abfrage, um Postnamen zu erhalten, die mit einer Ziffer beginnen

Ich implementiere einen AZ-Index für einen benutzerdefinierten Post-Typ. Ich habe meine Links drucken die Seite und die Abfrage für die Briefe arbeiten. Die Zahlen bringen mich jedoch zum Stolpern, weil ich nicht möchte, dass sie ganz gleich funktionieren. Ich möchte, dass der erste Link “0-9” liest und darauf klickt, um alle Beiträge anzuzeigen, die mit einer Nummer beginnen.

Ich denke, ein Platzhalter ist die Antwort, aber es funktioniert nicht so, wie ich es erwarte. Hier ist meine function aus meiner 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' ); 

Wenn der Abfrageparameter $first_letter gleich ‘num’ ist, möchte ich, dass die Abfrage nach allen post_names die mit den Zahlen 0-9 . Dies funktioniert jedoch nicht:

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

Wie kann ich alle Posts erhalten, bei denen post_name mit einer Ziffer beginnt, 0-9?

Solutions Collecting From Web of "Benutzerdefinierte Abfrage, um Postnamen zu erhalten, die mit einer Ziffer beginnen"

Die Lösung von @RolandoMySQLDBA gibt Ihnen alle Beiträge, weil Sie ein * und kein + . Das * bedeutet, dass null oder mehr Übereinstimmungen zurückgegeben werden, was nicht gewünscht ist. In diesem Fall brauchen Sie auch keines, sondern nur das erste Zeichen. Versuche dies:

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