Consulta personalizada para obter nomes de postes começando com um dígito

4

Estou implementando um índice A-Z para um tipo de postagem personalizado. Eu tenho meus links imprimindo a página e a consulta trabalhando para as letras. No entanto, os números estão me atrapalhando porque eu não quero que eles funcionem da mesma forma. Quero que o primeiro link leia "0-9" e clique nele para mostrar todas as postagens que começam com um número.

Eu acho que um curinga é a resposta, mas não está funcionando como eu esperava. Aqui está minha função do meu 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' );

Se o parâmetro de consulta $first_letter for igual a 'num', quero que a consulta procure todos os post_names que começam com números 0-9 . No entanto, isso não funciona:

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

Como posso obter todas as postagens em que o post_name começa com qualquer dígito, 0-9?

    
por NatalieMac 28.01.2013 / 08:04

1 resposta

2

A solução dada por @RolandoMySQLDBA fornecerá todas as postagens porque você tem um * e não um + . O * significa retornar zero ou mais correspondências, o que não é o que você deseja. Neste caso, você realmente não precisa, mas apenas para combinar com o primeiro caractere. Tente isto:

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

    
por Dan 29.01.2013 / 03:40