it-swarm.com.de

Wp post title alphabetisch und numerisch sortieren?

Gibt es eine Möglichkeit, eine neue Wordpress-Post-Abfrage nach dem Titel zu sortieren, aber nicht alphabetisch, sondern numerisch?

Ich habe einige Titel, die einen großen Teil des gleichen Namens in alphabetischer Reihenfolge haben, und danach eine Nummer, also setzt Wordpress zum Beispiel title12 vor title1.

$args = array( 'orderby'=> 'title', 'order' => 'ASC', ); $loop = new WP_Query( $args );

Ich weiß, dass wir diese Funktion haben, um Titel in aufsteigender Reihenfolge zu sortieren, aber es werden keine Titel wie die folgenden sortiert: - Titel 1 Titel 2

Bitte lassen Sie mich wissen, ob wir mit wp query umgehen können. Danke im Vorraus für deine Hilfe :)

1
Saurabh

Nun, technisch gesehen ist das, was WP tut, korrekt. Sie können Ihre Titel entweder mit vorangestellten 0en umbenennen.

Title 001
Title 012 

Andernfalls

Sie können die Sortierung anhand des Veröffentlichungsdatums verwenden

Oder Sie können ein Auftrags-Metafeld verwenden und dieses mit wp_query sortieren.

2
woony

Ihre Titel sind keine Zahlen. Sie können nicht numerisch sortieren, wenn Sie keine Zahlen haben. Wohin geht "T" in einer numerischen Sequenz?

Wenn Sie jedoch ein konsistentes Muster haben, mit dem Sie den Titel aufteilen können - ich habe ein Leerzeichen verwendet und ein Muster wie "Titel" + Leerzeichen + "Zahl" angenommen - können Sie Folgendes tun:

function numeric_sort_title_field($fields) {
  remove_filter('posts_fields','numeric_sort_title_field');
  global $wpdb;
  $fields .= ', ';
  $fields .= 'REVERSE(';
    $fields .= 'LEFT(';
      $fields .= "REVERSE({$wpdb->posts}.post_title),";
      $fields .= "LOCATE(' ',REVERSE({$wpdb->posts}.post_title))";
    $fields .= ')';
  $fields .= ') + 0';
  $fields .= ' AS number';

  $fields .= ', ';
  $fields .= 'REVERSE(';
    $fields .= 'LEFT(';
      $fields .= "REVERSE({$wpdb->posts}.post_title),";
      $fields .= "LENGTH({$wpdb->posts}.post_title) - LOCATE(' ',REVERSE({$wpdb->posts}.post_title))";
    $fields .= ')';
  $fields .= ') + 0';
  $fields .= ' AS title_text';

  return $fields;
}
add_filter('posts_fields','numeric_sort_title_field');

function numeric_sort_title($orderby) {
  remove_filter('posts_orderby','numeric_sort_title');
  $orderby = ' title_text, number';
  return $orderby;
}
add_filter('posts_orderby','numeric_sort_title');

$q = new WP_Query(
  array(
    'post_type' => 'post',
    'posts_per_page' => -1
  )
);
var_dump($q->request);
if ($q->have_posts()) {
  while ($q->have_posts()) {
    $q->the_post();
    the_title();
    echo '<br>';
  }
}

Sie sollten Beiträge erhalten, die nach dem Textteil des Titels und dann nach dem numerischen Teil sortiert sind.

0
s_ha_dum