it-swarm.asia

Yinelenen Özel Taksonomi Durumularını Bir Açılır Pencereden Silme

client_name adında özel bir taksonomi içeren özel bir yazı türüne sahibim. Bu özel yazı türlerini yükleyen ve bunları görüntüleyen bir sayfa var. Geliştirmem gereken, yaptığım özel yazıların tüm özel taksonomisini gösteren bir açılır liste. Ancak yinelenenleri silmeliyim ve alfabetik olarak düzenlemeliyim.

Kopyaları kaldırmaya çalıştığım şey bu (işe yaramıyor):

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

Tamam, şimdi geçen gün bu PHP işlevine rastladım ve istediğimi yapıyor, nasıl doğru kullanacağımı bilmiyorum.

array_unique($input);

Bana yardım edin çocuklar .... Not Yukarıda listelenen kod tüm dosya değil, denediğim yalnızca bir kod dalı.


GÜNCELLEŞTİRME

Hey bu bana biraz yardımcı oluyor, ve ben bunu kullanmayı buldum, bu beni% 95 yaptı, ama henüz% 100 yapmıyor. Kodunu denedim ve kullanıyorum bunu denedim, ve dup'leri kaldırıyor, ancak hmm gösterilmeyecek olandan sonra gelen herhangi bir şey ....

Heres WP kodunu:

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

Ve işte dizinin çıktısı, dizi çıktısını çoğaltır, çünkü her döngü içinde yeni bir yazı çağrıldığında çağrılır. Sayfa burada mevcuttur:

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

Ne demek istediğimi görmek için kaynağı görüntüleyin.

2

Merhaba @ Hunter Brelsford:

Seni burada görmek güzel LinkedIn'deki WordPress Grubu'ndan .

Belki de sorunuzu yanlış anlıyorum ama sanki bir dizideki duplerden kurtulmaya çalışıyorsunuzdur ? Örneğin, bir dizi istemciniz olduğunu varsayalım:

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

Ve böyle bir diziye dönüştürmek ister misiniz?

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

( Evetse, bu bir PHP sorusu ve bir WordPress sorusu değil, normalde bir şey göndeririz , ancak Ben devam edeceğim ve yine de cevaplayacağım. )

Bu kolay; dizi tuşları PHP içinde benzersiz olduğundan, sadece diziyi çevirin (değerleri ile tuşları değiştirin), sonra dizi tuşlarını döndürün;

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

Bu kod yazdırır:

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

Peşinde olduğun şey bu muydu?

GÜNCELLEŞTİRME:

Merhaba @ Hunter Brelsford :

Güncellemene cevap veriyorum. Tamam, neden bunu farklı bir şekilde ele almaya çalışmıyoruz? İşte, web sitenizin kök dizinine test.php olarak kopyalayıp çalıştırabileceğiniz görmek için http://magicvideo.com/test.php olarak çalıştırabileceğiniz bağımsız bir örnek:

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

taxonomy='client_name' için 'post_type='our_work' içindeki terimleri sorgulamak için ham SQL kullanıyoruz ve ardından taksonomi terimlerinin listesini filtrelemek için $term->term_ids öğelerini topluyoruz. Ham SQL kullandım çünkü WordPress bir API üzerinden bu verileri elde etmek için iyi bir yol sağlamaz, en azından kısa sürede ( birisinin daha iyi bir API yoluyla daha iyi bir yoldan haberi olduğunu fark edemedim. gereğinden fazla veri yüklemeyi gerektirmiyor, lütfen bana bildirin .

Umarım bu bir yaklaşım önerecektir, böylelikle bu kodu kendi örneğinizde kullanabileceksiniz? Olmazsa haberim olsun.

2
MikeSchinkel