it-swarm-id.com

Menghapus Persyaratan Taksonomi Duplikat Khusus dari dalam Dropdown Select?

Saya memiliki jenis pos khusus yang menyertakan taksonomi khusus, disebut client_name. Ada halaman yang memuat jenis posting khusus ini dan menampilkannya. Apa yang perlu saya kembangkan adalah daftar tarik-turun yang menampilkan semua taksonomi khusus dari pos-pos kustom tersebut, yang telah saya lakukan, tetapi saya perlu menghapus duplikat, dan mengaturnya secara alfabet, di mana saya mengalami masalah.

Inilah yang saya coba untuk menghapus duplikat (tidak berfungsi):

<?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, sekarang saya menemukan fungsi PHP hari yang lalu dan melakukan apa yang saya inginkan, saya hanya tidak tahu bagaimana menggunakannya dengan benar.

array_unique($input);

Tolong bantu saya. Perhatikan kode yang tercantum di atas hanya satu cabang kode yang saya coba, bukan seluruh file.


MEMPERBARUI

Hai ini memang membantu saya sedikit, dan saya menemukan ini untuk digunakan, ini membuat saya seperti 95% selesai, tetapi belum 100%. Saya mencoba kode Anda, dan saya mencoba yang ini saya gunakan, dan menghapus dups tetapi apa pun yang datang setelah itu tidak akan menampilkan hmm ....

Inilah kode 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();

Dan di sini adalah output dari array, itu menduplikasi output array karena dipanggil setiap kali posting baru dipanggil di dalam loop. Halaman ini tersedia di sini:

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

Lihat sumber untuk melihat apa yang saya maksud.

2

Hai @ Hunter Brelsford:

Senang melihat Anda di sini dari Grup WordPress di LinkedIn .

Mungkin saya salah mengerti pertanyaan Anda tetapi sepertinya Anda hanya mencoba untuk menghilangkan dups dalam array? Misalnya, katakanlah Anda memiliki klien array:

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

Dan Anda ingin mengonversi ke array seperti ini?

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

( Jika ya, itu pertanyaan PHP dan bukan pertanyaan WordPress, biasanya sesuatu kami kirim , tetapi Saya akan tetap melanjutkan dan menjawab di sini. )

Ini mudah; karena kunci array unik di PHP cukup balikkan array (tukar nilainya dengan kunci mereka) lalu kembalikan kunci array dan Anda akan memiliki array unik Anda, seperti:

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

Kode itu dicetak:

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

Apakah itu yang Anda cari?

MEMPERBARUI:

Hai @ Hunter Brelsford :

Saya menanggapi pembaruan Anda. Oke, mengapa kita tidak mencoba dan mengatasi hal ini dengan cara yang berbeda? Berikut adalah contoh mandiri yang dapat Anda salin ke root situs web Anda sebagai test.php dan kemudian jalankan sebagai http://magicvideo.com/test.php untuk melihatnya berfungsi:

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

Kami menggunakan SQL mentah untuk meminta istilah dalam taxonomy='client_name' untuk 'post_type='our_work' dan kemudian kami mengumpulkan $term->term_ids untuk memfilter daftar istilah taksonomi. Saya menggunakan SQL mentah karena WordPress tidak menyediakan cara yang baik untuk mendapatkan data ini melalui API, setidaknya tidak saya dapat menemukan dalam waktu singkat ( jika orang lain tahu cara yang lebih baik melalui API yang tidak perlu memuat lebih banyak data daripada yang diperlukan, harap beri tahu saya ).

Semoga ini akan menyarankan pendekatan sehingga Anda akan dapat menggunakan kode ini dalam contoh Anda? Beri tahu saya jika tahu jika tidak.

2
MikeSchinkel