Удаление дублирующих пользовательских терминов таксономии из выбора в раскрывающемся списке?
-
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);
Помогите мне, ребята .... Обратите внимание, что код, перечисленный выше, - это только одна филиал кода, который я пытался, а не весь файл.
ОБНОВИТЬ
Эй, это мне очень помогает, это и я обнаружил, что это использует, это делает меня на 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();
И вот выход из массива, он дублирует вывод массива, потому что он называется каждый раз, когда новый пост вызывается в цикле. Страница доступна здесь:
Посмотрите источник, чтобы увидеть, что я имею в виду.
Решение
Привет @Hunter Brelsford:
Приятно видеть вас здесь из WordPress Group на LinkedIn.
Может быть, я неправильно понял ваш вопрос, но это звучит так, как будто ты Просто пытаетесь избавиться от сумасшедших в массиве? Например, допустим, у вас есть клиенты массива:
<?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 Брелсфорд:
Я отвечаю на ваше обновление. Хорошо, почему бы нам не попытаться справиться с этим по -другому? Вот отдельный пример, который вы можете скопировать в корне своего сайта как 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_id
S, чтобы отфильтровать список терминов таксономии. Я использовал RAW SQL, потому что WordPress не предоставляет хорошего способа получить эти данные через API, по крайней мере, не то, что я мог найти в короткие сроки (Если кто -то другой знает о лучшем способе через API, который не требует загрузки намного больше данных, чем необходимо, дайте мне знать).
Надеемся, что это предложит подход, чтобы вы сможете использовать этот код в своем примере? Дай мне знать, если знают, если нет.