it-swarm-ko.tech

드롭 다운 내에서 중복 사용자 정의 분류 용어 제거?

나는 client_name라고 불리는 커스텀 택 소노 미를 포함하는 커스텀 포스트 타입을 가지고있다. 이러한 맞춤 게시 유형을로드하고 표시하는 페이지가 있습니다. 내가 개발해야하는 것은 내가 해낸 맞춤 게시물의 모든 맞춤 분류를 표시하는 드롭 다운 목록이지만 중복을 제거하고 사전 순으로 정렬해야합니다. 여기서 문제가 발생합니다.

이것은 중복을 제거하기 위해 노력하고 있습니다 (작동하지 않습니다) :

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

이제는 내가이 PHP 기능을 건너 뛰었고 원하는대로 작동합니다. 올바르게 사용하는 법을 모릅니다.

array_unique($input);

얘들 아 좀 도와 줘. .... 위에 나열된 코드는 전체 파일이 아니라 단지 하나의 코드 브랜치 일뿐입니다.


최신 정보

이봐 요, 이걸 사용하면 꽤 도움이 되네요. 이걸 사용하면 95 % 나되는 것처럼 느껴지지만 아직 100 %는 안됩니다. 나는 당신의 코드를 시험해 보았고, 나는 이것을 사용하려고 시도했다. 그리고 그것은 dup의 것을 제거한다.

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

그리고 배열의 출력이 있습니다. 배열 출력은 새로운 게시물이 루프 내에서 호출 될 때마다 호출되므로 중복됩니다. 이 페이지는 다음에서 사용할 수 있습니다.

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

내 말 뜻을보기 위해 출처를보십시오.

2
Hunter Brelsford

안녕하세요 @ Hunter Brelsford :

여기에서/LinkedIn의 WordPress Group에서 당신을 만나서 반가워요. .

어쩌면 나는 당신의 질문을 오해하지만 배열에있는 dups를 없애기 위해 들리는 것 같습니까? 예를 들어 배열 클라이언트가 있다고 가정 해 봅시다 :

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

그리고 이런 배열로 변환하고 싶습니까?

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

( 만약 그렇다면 PHP 질문이고 WordPress 질문이 아니며 일반적으로 우리가 보내지는 하지만 어쨌든 여기서 대답 할 것입니다. )

Tis 쉬운; 배열 키는 PHP에서 유일하기 때문에 배열을 뒤집고 (키로 값을 교환 한 다음) 배열 키를 반환하면 다음과 같이 고유 한 배열을 갖게됩니다 :

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

코드가 다음과 같이 인쇄됩니다.

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

그게 너였던거야?

최신 정보:

안녕하세요 @ Hunter Brelsford :

업데이트에 응답하고 있습니다. 좋아, 우리가 이걸 다른 방식으로 시도해 보지 그래? 다음은 test.php로 웹 사이트의 루트에 복사 한 다음 http://magicvideo.com/test.php 로 실행하여 작동 여부를 확인하는 독립 실행 형 예입니다.

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

우리는 원시 SQL을 사용하여 taxonomy='client_name'에 대한 'post_type='our_work'의 용어를 쿼리 한 다음 $term->term_id를 수집하여 분류 용어 목록을 필터링합니다. WordPress가 API를 통해이 데이터를 가져 오는 좋은 방법을 제공하지 않기 때문에 원시 SQL을 사용했기 때문에 다른 사람이 API를 통해 더 좋은 방법을 알고 있다면 (예 : 필요한 것보다 더 많은 데이터를로드해야합니다. ).

당신의 예제에서이 코드를 사용할 수 있도록 접근법을 제안 해 주시겠습니까? 알지 못하면 알려주세요.

2
MikeSchinkel