it-swarm.dev

Odstranění duplicitních výrazů z vlastní taxonomie z rozevíracího seznamu Vybrat?

Mám vlastní typ příspěvku, který zahrnuje vlastní taxonomii nazvanou client_name. Existuje stránka, která načte tyto vlastní typy příspěvků a zobrazí je. Potřebuji vyvinout rozevírací seznam, který zobrazuje všechny vlastní taxonomie vlastních příspěvků, které jsem udělal, ale musím odstranit duplikáty a uspořádat je abecedně, což je místo, kde mám problémy.

To je to, co se snažím odstranit duplikáty (nefunguje to):

<?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, teď jsem běžel přes tuto PHPfunkce druhý den a dělá to, co chci, já prostě nevím, jak ji používat správně.

array_unique($input);

Pomozte mi kluci .... Všimněte si, že kód uvedený výše je pouze jedna větev kódu, kterou jsem se snažil, ne celý soubor.


AKTUALIZACE

Ahoj, tohle mi docela pomohlo, a to jsem našel, abych to využil, to mi udělalo jako 95%, ale ne 100%. Snažil jsem se váš kód, a já jsem se snažil tento jsem používám, a to odstraňuje dup, ale cokoli, co přijde poté, co zvyklý displej hmm.

Zde je WP kód:

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

A zde je výstup z pole, duplikuje výstup matice, protože se nazývá pokaždé, když se ve smyčce nazývá nový příspěvek. Stránka je k dispozici zde:

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

Podívejte se na zdroj, abyste viděli, co myslím.

2

Ahoj @ Hunter Brelsford:

Je dobré vidět vás zde z WordPress Group na LinkedIn .

Možná, že jsem nepochopil vaši otázku, ale zní to, jako byste se jednoduše pokoušeli zbavit dups v poli? Například, řekněme, že máte klienty pole:

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

A chcete takhle převést na pole?

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

( Pokud ano, jedná se o otázku PHP a ne o otázku WordPress, obvykle něco odesíláme , ale Jdu do toho a odpovím tady stejně.

Snadno; protože klíče klíče jsou jedinečné v PHP prostě překlopit pole (vyměnit hodnoty s jejich klíči) pak vrátit pole klíče a vy budete mít vaše jedinečné pole, jako tak:\t

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

Tento kód se vytiskne:

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

Bylo to po tobě?

AKTUALIZACE:

Ahoj @ Hunter Brelsford :

Odpovídám na vaši aktualizaci. Dobře, proč se to nepokoušíme jinak? Zde je samostatný příklad, který můžete zkopírovat do kořenového adresáře svých webových stránek jako test.php a poté jej spustit jako http://magicvideo.com/test.php , abyste ho mohli vidět:

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

Použijeme surový SQL k dotazování termínů v taxonomy='client_name' pro 'post_type='our_work' a pak sbíráme $term->term_ids pro filtrování seznamu termínů taxonomie. Použil jsem raw SQL, protože WordPress neposkytuje dobrý způsob, jak získat tato data přes API, alespoň ne, že bych mohl najít v krátkém čase (, pokud někdo jiný ví o lepší cestě přes API, které nemá Vyžadovat načítání mnohem více dat, než je nutné, dejte mi prosím vědět ).

Doufejme, že to bude navrhovat přístup, takže budete moci použít tento kód ve vašem příkladu? Dejte mi vědět, jestli ne.

2
MikeSchinkel