ドロップダウン選択内から重複したカスタム分類規約を削除しますか?

wordpress.stackexchange https://wordpress.stackexchange.com/questions/1140

  •  16-10-2019
  •  | 
  •  

質問

カスタム分類法を含むカスタム投稿タイプがあります。 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);

みんなを助けてください....上記のコードは、ファイル全体ではなく、私が試していたコードブランチが1つだけです。


アップデート

ねえ、これは私をかなり助けます、それと私はこれを使用することがわかりました、これは私を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/

ソースを表示して、私が意味することを確認してください。

役に立ちましたか?

解決

やあ @hunter Brelsford:

ここからお会いできてうれしいです LinkedInのWordPressグループ.

多分私はあなたの質問を誤解していますが、それはあなたがいるように聞こえます アレイでDUPを取り除こうとしているだけですか? たとえば、配列クライアントがいるとしましょう。

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

そして、あなたはこのような配列に変換したいですか?

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

(はいの場合、それはPHPの質問であり、WordPressの質問ではなく、通常は何か 私たちは去ります, 、しかし、とにかくここで答えます。)

簡単です。配列キーは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);

RAW SQLを使用して、 taxonomy='client_name' にとって 'post_type='our_work' そして、私たちは収集します $term->term_ids分類項のリストをフィルタリングします。 WordPressはAPIを介してこのデータを取得する良い方法を提供しないため、少なくとも短期間で見つけることができなかったため、RAW SQLを使用しました(短期間で見つけることができませんでした。他の誰かが、必要以上に多くのデータを読み込む必要がないAPIを介してより良い方法を知っている場合は、私に知らせてください).

うまくいけば、これがアプローチを提案して、このコードを例で使用できるようにすることができますか?そうでないかどうかを教えてください。

ライセンス: CC-BY-SA帰属
所属していません wordpress.stackexchange
scroll top