Consulta personalizada para obtener nombres de publicaciones que comienzan con un dígito

4

Estoy implementando un índice A-Z para un tipo de publicación personalizada. Tengo mis enlaces imprimiendo la página y la consulta trabajando para las letras. Sin embargo, los números me están fallando porque no quiero que funcionen del mismo modo. Quiero que el primer enlace lea '0-9' y haga clic en él para mostrar todas las publicaciones que comienzan con un número.

Creo que la respuesta es un comodín, pero no está funcionando como esperaba. Aquí está mi función de mi 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 el parámetro de consulta $first_letter es igual a 'num', quiero que la consulta busque todos los post_names comenzando con los números 0-9 . Sin embargo, esto no funciona:

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

¿Cómo puedo obtener todas las publicaciones donde el post_nombre comienza con cualquier dígito, 0-9?

    
pregunta NatalieMac 28.01.2013 - 08:04

1 respuesta

2

La solución dada por @RolandoMySQLDBA te dará todas las publicaciones porque tienes un * y no un + . El * significa devolver cero o más coincidencias, que no es lo que quieres. En este caso, en realidad tampoco es necesario, pero solo para coincidir con el primer carácter. Prueba esto:

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

    
respondido por el Dan 29.01.2013 - 03:40

Lea otras preguntas en las etiquetas