web-dev-qa-db-fra.com

Supprimer des termes de taxonomie personnalisés en double dans une liste déroulante Sélectionnez?

J'ai un type de message personnalisé qui inclut une taxonomie personnalisée, appelée client_name. Une page charge ces types de publication personnalisés et les affiche. Ce que j'ai besoin de développer, c'est une liste déroulante qui affiche toute la taxonomie personnalisée de ces publications personnalisées, ce que j'ai fait, mais je dois supprimer les doublons et les classer par ordre alphabétique, c'est là que j'ai des problèmes.

C'est ce que j'essaie de supprimer les doublons (cela ne fonctionne pas):

<?php
<form method="post" id="clientform" action="" onsubmit="return getURL(this.url.value)">
  <select name="url" id="client">
    <option selected="selected">By Client</option>
    <?php
      $args=array(    
        'post_type' => 'our_work',
        'post_status' => 'publish',
        'order' => 'ASC',
        'posts_per_page' => -1
      );
      $my_query = new WP_Query($args);
      $k=0;
      if( $my_query->have_posts() ) { 
        while ($my_query->have_posts()) : $my_query->the_post();
          $termArray[$k] = array (trim(get_the_term_list( $post->ID, 'client_name')));
          // $text = trim(get_the_term_list( $post->ID, 'client_name'));
          for ($i = 0; $i <= $termArray.count; $i++ ) {    
            for ($j = 0; $j <= $tempArray.count; $j++) {
              if ($tempArray[$i] == $tempArray[$j]) {        
                unset($tempArray[$k]); 
                $termArray = array_values($termArray);
              }
            } // end of for 
            $k++; 
        ?><option value="<?php bloginfo('url'); echo "/client_name/"; echo $termArray[$k]; ?>"><?php echo $termArray[$k]; ?></option><?php 
        } ?>    
        <?php 
        endwhile; 
      } 
      wp_reset_query(); 
    ?>
  </select>
  <input type="submit" id="clientsubmit" value="Search" />
</form>

Ok, maintenant je suis tombé sur cette fonction PHP l'autre jour et il fait ce que je veux, je ne sais tout simplement pas comment l'utiliser correctement.

array_unique($input);

Aidez-moi les gars .... Notez que le code répertorié ci-dessus n'est qu'une branche de code que j'essayais, pas le fichier entier.


METTRE À JOUR

C’est bon, ça m’aide beaucoup, c’est ce que j’ai trouvé, cela me donne 95% de fait, mais pas encore à 100%. J'ai essayé votre code, et j'ai essayé celui que j'utilise, et il supprime le dup mais tout ce qui vient après ne s'affichera pas hmm ....

Voici le code WP:

<?php
if( $my_query->have_posts() ) { 
  while ($my_query->have_posts()) : $my_query->the_post();
    $termArray[$i] = trim(get_the_term_list( $post->ID, 'client_name'));
    $termArray = array_unique($termArray);
    $termArray = array_values($termArray);
    print_r($termArray);  
    print_r(sizeof($termArray));
    if ($termArray[$i] != '') { 
      ?><option value="<?php bloginfo('url'); echo "/client_name/"; echo $termArray[$i]; ?>"><?php echo $termArray[$i]; ?></option><?php 
    }// end of if $i++; 
  endwhile; 
} 
wp_reset_query();

Et voici la sortie du tableau, elle duplique la sortie du tableau car elle est appelée chaque fois qu'une nouvelle publication est appelée dans la boucle. La page est disponible ici:

http://magicvideo.com/cms/work/

Voir la source pour voir ce que je veux dire.

2
Hunter Brelsford

Bonjour @ Hunter Brelsford:

Content de vous voir ici depuis le groupe WordPress sur LinkedIn .

Peut-être que je comprends mal votre question, mais il semblerait que vous essayiez simplement de vous débarrasser des dupes dans un tableau? Par exemple, supposons que vous ayez un tableau de clients:

<?php
$clients = array(
  'Jones Construction',
  'Smith Wholesale',
  'Smith Wholesale',
  'Williams Dry Cleaning'
);

Et vous voulez convertir en un tableau comme celui-ci?

<?php
$clients = array(
  'Jones Construction',
  'Smith Wholesale',
  'Williams Dry Cleaning'
);

( Si oui, c’est une question PHP et non une question WordPress, normalement quelque chose est renvoyé , mais Je vais répondre et répondre ici quand même. )

C'est facile. Puisque les clés de tableau sont uniques dans PHP, il suffit de retourner le tableau (échangez les valeurs avec leurs clés), puis de renvoyer les clés de tableau et vous obtiendrez votre tableau unique, comme suit:

<?php
$clients = array(
  'Jones Construction',
  'Smith Wholesale',
  'Smith Wholesale',
  'Williams Dry Cleaning'
);
print_r(array_keys(array_flip($clients)));

Ce code imprime:

Array
(
    [0] => Jones Construction
    [1] => Smith Wholesale
    [2] => Williams Dry Cleaning
)

Était-ce ce que vous recherchiez?

METTRE À JOUR:

Bonjour @ Hunter Brelsford :

Je réponds à votre mise à jour. Ok, pourquoi n'essayons-nous pas d'aborder cela d'une manière différente? Voici un exemple autonome que vous pouvez copier à la racine de votre site Web sous le nom test.php, puis l'exécuter en tant que http://magicvideo.com/test.php pour le voir fonctionner:

<?php
include "wp-load.php";
header('Content-Type:text/plain');
global $wpdb;
$sql = <<<SQL
SELECT DISTINCT
  tt.term_id
FROM {$wpdb->posts} p
  INNER JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id
  INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE 1=1
  AND p.post_status='publish'
  AND p.post_type='our_work'
  AND tt.taxonomy='client_name'
SQL;
$terms = $wpdb->get_results($sql);
$term_ids = array();
foreach($terms as $term) {
  $term_ids[] = $term->term_id;
}
$terms = get_terms('client_name',array(
  'include'=> implode(',',$term_ids),
));
print_r($terms);

Nous utilisons du SQL brut pour interroger les termes dans taxonomy='client_name' pour 'post_type='our_work', puis nous collectons le $term->term_ids pour filtrer la liste des termes de taxonomie. J'ai utilisé du SQL brut parce que WordPress ne fournit pas un bon moyen d'obtenir ces données via une API, du moins pas que je pourrais trouver rapidement ( si quelqu'un d'autre connaît un meilleur moyen via l'API Vous n’avez pas besoin de charger plus de données que nécessaire, merci de me le faire savoir ).

Espérons que cela suggérera une approche afin que vous puissiez utiliser ce code dans votre exemple? Faites-moi savoir si savoir si non.

2
MikeSchinkel