it-swarm-es.com

¿Desea eliminar los Términos de taxonomía personalizados duplicados dentro de un menú desplegable Seleccionar?

Tengo un tipo de publicación personalizada que incluye una taxonomía personalizada, llamada client_name. Hay una página que carga estos tipos de publicaciones personalizadas y las muestra. Lo que necesito desarrollar es una lista desplegable que muestre toda la taxonomía personalizada de esas publicaciones personalizadas, lo que he hecho, pero necesito eliminar los duplicados y organizarlos alfabéticamente, que es donde estoy teniendo problemas.

Esto es lo que estoy tratando de eliminar duplicados (no funciona):

<?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, ahora encontré esta función PHP el otro día y hace lo que quiero, pero no sé cómo usarla correctamente.

array_unique($input);

Ayúdenme, muchachos ... Tenga en cuenta que el código que aparece arriba es solo una rama de código que estaba intentando, no todo el archivo.


ACTUALIZAR

Oye, esto me ayuda un poco, y encontré esto para usar, esto me hace como 95% hecho, pero no 100% todavía. Probé su código, y probé este que estoy usando, y elimina los duplicados, pero todo lo que venga después no se mostrará hmm ...

Aquí está el WP código:

<?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();

Y aquí está la salida de la matriz, duplica la salida de la matriz porque se llama cada vez que se llama a una nueva publicación dentro del bucle. La página está disponible aquí:

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

Ver la fuente para ver lo que quiero decir.

2
Hunter Brelsford

Hola @ Hunter Brelsford:

Es bueno verte aquí desde WordPress Group en LinkedIn .

Tal vez no entiendo bien tu pregunta, pero parece que estás simplemente tratando de deshacerte de los dups en una matriz. Por ejemplo, digamos que tienes una matriz de clientes:

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

¿Y quieres convertir a una matriz como esta?

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

( Si es así, es una pregunta PHP y no una pregunta de WordPress, normalmente algo enviamos , pero Voy a seguir adelante y responder aquí de todos modos. )

Es fácil; ya que las claves de la matriz son únicas en PHP simplemente voltea la matriz (intercambie los valores con sus claves), luego devuelva las claves de la matriz y tendrá su matriz única, así:

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

Ese código se imprime:

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

¿Era eso lo que estabas buscando?

ACTUALIZAR:

Hola @ Hunter Brelsford :

Estoy respondiendo a tu actualización. Bien, ¿por qué no intentamos abordar esto de una manera diferente? Este es un ejemplo independiente que puede copiar en la raíz de su sitio web como test.php y luego ejecutarlo como http://magicvideo.com/test.php para verlo funcionar:

<?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);

Utilizamos SQL sin procesar para consultar los términos en taxonomy='client_name' para 'post_type='our_work' y luego recopilamos los $term->term_ids para filtrar la lista de términos de taxonomía. Utilicé SQL en bruto porque WordPress no proporciona una buena manera de obtener estos datos a través de una API, al menos no que pueda encontrar en poco tiempo ( si alguien más conoce una mejor manera a través de la API que no lo hace. No es necesario cargar muchos más datos de los necesarios, por favor avíseme ).

Esperamos que esto sugiera un enfoque para que pueda usar este código en su ejemplo. Déjame saber si saber si no.

2
MikeSchinkel