it-swarm-vi.tech

Xóa các điều khoản phân loại tùy chỉnh trùng lặp từ trong danh sách thả xuống Chọn?

Tôi có một loại bài đăng tùy chỉnh bao gồm phân loại tùy chỉnh, được gọi là client_name. Có một trang tải các loại bài tùy chỉnh và hiển thị chúng. Những gì tôi cần phát triển là một danh sách thả xuống hiển thị tất cả các phân loại tùy chỉnh của các bài đăng tùy chỉnh mà tôi đã thực hiện, nhưng tôi cần xóa các bản sao và sắp xếp chúng theo thứ tự bảng chữ cái, đó là nơi tôi đang gặp vấn đề.

Đây là những gì tôi đang cố gắng để loại bỏ trùng lặp (nó không hoạt động):

<?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, bây giờ tôi đã chạy qua hàm PHP này vào ngày khác và nó làm những gì tôi muốn, tôi chỉ không biết làm thế nào để sử dụng nó một cách chính xác.

array_unique($input);

Giúp tôi với mọi người .... Lưu ý mã được liệt kê ở trên chỉ là một nhánh mã tôi đang thử chứ không phải toàn bộ tệp.


CẬP NHẬT

Này, điều này giúp tôi khá nhiều, và tôi đã tìm thấy nó để sử dụng, điều này giúp tôi hoàn thành 95%, nhưng chưa hoàn thành 100%. Tôi đã thử mã của bạn và tôi đã thử mã này tôi đang sử dụng và nó sẽ xóa bản sao nhưng mọi thứ xuất hiện sau khi nó không hiển thị hmm ....

Đây là mã 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();

Và đây là đầu ra từ mảng, nó nhân đôi đầu ra mảng vì nó được gọi mỗi khi một bài đăng mới được gọi trong vòng lặp. Trang này có sẵn ở đây:

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

Xem nguồn để xem ý tôi là gì.

2
Hunter Brelsford

Xin chào @ Hunter Brelsford:

Rất vui được gặp bạn ở đây từ Nhóm WordPress trên LinkedIn .

Có thể tôi hiểu nhầm câu hỏi của bạn nhưng có vẻ như bạn chỉ đơn giản là đang cố gắng loại bỏ các dups trong một mảng? Ví dụ: giả sử bạn có một máy khách mảng:

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

Và bạn muốn chuyển đổi sang một mảng như thế này?

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

( Nếu có, đó là câu hỏi PHP và không phải là câu hỏi WordPress, thông thường một cái gì đó chúng tôi gửi đi , nhưng Tôi sẽ tiếp tục và trả lời ở đây. )

Dễ dàng; vì các khóa mảng là duy nhất trong PHP chỉ cần lật mảng (trao đổi các giá trị với các khóa của chúng) sau đó trả về các khóa mảng và bạn sẽ có mảng duy nhất của mình, như vậy:

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

Mã đó in:

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

Đó có phải là những gì bạn đã sau?

CẬP NHẬT:

Xin chào @ Hunter Brelsford :

Tôi đang trả lời cập nhật của bạn. Được rồi, tại sao chúng ta không thử và giải quyết điều này theo một cách khác? Đây là một ví dụ độc lập mà bạn có thể sao chép vào thư mục gốc của trang web của mình dưới dạng test.php và sau đó chạy nó dưới dạng http://magicvideo.com/test.php để xem nó hoạt động:

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

Chúng tôi sử dụng SQL thô để truy vấn các thuật ngữ trong taxonomy='client_name' cho 'post_type='our_work' và sau đó chúng tôi thu thập $term->term_ids để lọc danh sách các thuật ngữ phân loại. Tôi đã sử dụng SQL thô vì WordPress không cung cấp cách tốt để lấy dữ liệu này thông qua API, ít nhất là tôi không thể tìm thấy trong thông báo ngắn ( nếu ai đó biết cách tốt hơn thông qua API không Không yêu cầu tải nhiều dữ liệu hơn mức cần thiết, vui lòng cho tôi biết ).

Hy vọng rằng điều này sẽ gợi ý một cách tiếp cận để bạn có thể sử dụng mã này trong ví dụ của mình? Hãy cho tôi biết nếu biết nếu không.

2
MikeSchinkel