web-dev-qa-db-fra.com

Requête personnalisée pour obtenir des noms d'article commençant par un chiffre

J'implémente un index AZ pour un type de publication personnalisé. Mes liens sont imprimés sur la page et la requête fonctionne pour les lettres. Cependant, les chiffres me font trébucher parce que je ne veux pas qu'ils fonctionnent de la même manière. Je veux que le premier lien lise '0-9' et que je clique dessus pour afficher tous les articles commençant par un numéro.

Je pense qu'un joker est la solution, mais cela ne fonctionne pas comme je l'espérais. Voici ma fonction de mon 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' );

Si le paramètre de requête $first_letter est égal à 'num', je souhaite que la requête recherche tous les post_names commençant par les nombres 0-9. Cependant, cela ne fonctionne pas:

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

Comment puis-je obtenir tous les messages où le post_name commence par un chiffre, 0-9?

4
NatalieMac

La solution donnée par @RolandoMySQLDBA vous donnera toutes les publications car vous avez un * et non un +. Le * signifie renvoyer zéro correspondance ou plus, ce qui n'est pas ce que vous voulez. Dans ce cas, vous n’avez réellement besoin ni de l’un ni de l’autre, mais seulement du nom du premier caractère. Essaye ça:

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

2
Dan