web-dev-qa-db-fra.com

Boucle WP_Query, n’affiche pas correctement les caractères spéciaux dans le titre

J'ai un problème avec une boucle WP_query (code complet ci-dessous).

Chaque fois que je lance juste echo $post->post_title, le titre est bien imprimé.

Mais si j'essaie de faire quelque chose comme ce qui suit: echo substr($post->post_title,0,1), il ne peut pas afficher de caractères spéciaux tels que ø æ å. C'est comme si il divise le caractère spécial en deux - qu'est-ce que?

Je dis que cela sépare parce que, si j'essaie d'exécuter echo substr($post->post_title,0,2) (imprimer 2 caractères), il imprime le caractère correctement, mais n'en imprime qu'un.

Voici mon code complet pour la boucle:

<?php
$args = array( 
  'orderby'   => 'post_title',
  'order'     => 'ASC',
  'post_type' => 'ord',
  'posts_per_page' => -1
  );
$loop = new WP_query($args);

$mainArray = array_chunk($loop->posts, ceil(count($loop->posts) / 4)); // Array af arrays

foreach ($mainArray as $array) {
$first_letter = '';

  echo "<div class='col ordbog-column'>";
  foreach($array as $post) {
    $current_letter = strtoupper(substr($post->post_title,0,1));

    if($current_letter != $first_letter) {
      echo "<h3 class='letter' id='letter_$current_letter'>$current_letter</h3>";
      $first_letter = $current_letter;
    }

    $html = '<a href="'.get_permalink().'" class="ord">'.get_the_title().'</a><br/>';
    echo $html;
  }
  echo "</div>";
} 

Comment corriger cette boucle afin de pouvoir afficher correctement une seule lettre (peu importe la lettre) en tant que titre sur le contenu répertorié?

1
Martin

Avez-vous essayé mb_substr (), remplacez la fonction substr par mb_substr

$current_letter = strtoupper(mb_substr($post->post_title,0,1));
1
Adeel Abbas

Il s'agit d'un problème général PHP plutôt que d'un problème WP.

Plus précisément, ces caractères sont des caractères multi-octets, et le premier caractère saisi par substr le coupe en deux

Essayez plutôt d'utiliser mb_substr

1
Tom J Nowell