Wordpress получает только уникальные значения пользовательских полей - PullRequest
0 голосов
/ 09 мая 2011

Я работаю над сайтом Wordpress, который отображает количество проектов, хранящихся в пользовательских типах записей.Каждая настраиваемая запись включает в себя два настраиваемых поля (среди прочих) «Имя проекта» и «Цвет проекта».О конкретном «имени проекта» может быть несколько пользовательских сообщений.

Я хочу создать легенду (ключ) для всех проектов, в которой перечислены «Имена проектов» и «Цвета проекта», взятые из пользовательскихзначения полей выше.

Так, например, у меня есть 3 проекта под названием "Бананы", цвет которых "Желтый", 6 под названием "Апельсины", цвет "оранжевый" и 4 под названием "Яблоки", цвет которых "зеленый».Моя легенда (ключ) должна отображать один банан в желтом, один оранжевый в оранжевом и одно яблоко в зеленом.

Конечно, если я использую цикл, он отображает 3 банана, 6 апельсинов и 4 яблока.Как я могу отобразить только список имен проектов и цветов проекта?

Я рассмотрел три метода: пользовательскую таксономию, проверку на наличие дубликатов в массиве и использование GROUP BYв качестве фильтра на posts_groupby.

GROUP BY кажется правильным путем, но я не могу заставить его что-либо сделать.Больше всего я поместил это в мои functions.php ...

function sort_legend ( $groupby ) {
    global $wpdb;
    $groupby .= "{$wpdb->postmeta}.meta_key = 'Color' "; 
    return $groupby;
}

... и применил его в качестве фильтра вокруг моего объекта Query ...

<?php  add_filter('posts_groupby', 'sort_legend'); ?>
<?php if ( $myQuery->have_posts() ) while ($myQuery->have_posts() ) : $myQuery->the_post(); ?>
<?php remove_filter('posts_groupby', 'sort_legend'); ?>

...но у меня все еще есть несколько записей.

1 Ответ

0 голосов
/ 13 мая 2011

Вот мое рабочее решение ...

Удалите пользовательские поля «Цвета проекта» и «Имена проектов» из пользовательского шаблона, (зарегистрируйтесь), зарегистрируйте пользовательскую таксономию под названием «Классы проекта» и назначьте вновь зарегистрированную таксономию пользовательскому типу публикации, см. здесь . В интерфейсе Wordpress присвойте каждому пользовательскому сообщению соответствующие бананы, сорта «Project Class», яблоки и т. Д., Снова объясненные в приведенной выше ссылке.

Однако по-прежнему существует проблема с отображением цветового ключа для каждой записи пользовательской таксономии. Я повторно использовал имена классов проекта в качестве имен таблиц стилей, чтобы дать каждому названию стиля цвет фона. Однако настоящие имена классов проекта имеют заглавные буквы и пробелы, которые необходимо удалить, чтобы сделать их удобными для таблицы стилей.

Добавить функцию php rename_projects в functions.php, которая изменяет пробелы и заглавные буквы в имени таксономии «Класс проекта» и делает его подходящим для имени в стиле css, я использовал ...

// Rename Projects custom field for css styles
function rename_projects($sProjectName) {
$sFind = ' '; 
$sReplace = '-';
$sAmended = mb_strtolower(str_replace( $sFind, $sReplace, $sProjectName ));
return $sAmended;
}

Теперь вы можете использовать имена классов вашего проекта в качестве имен таблиц стилей.

Далее, в шаблоне вашей страницы отобразите вашу собственную таксономию, таким образом ...

<?php
    $args=array(
    'taxonomy' => 'projectclass',
    'orderby' => 'name',
    'order' => 'ASC'
    );
    $categories=get_categories($args);
    foreach($categories as $category) {
        $sColorName = rename_projects($category->name); // To lower case and replace spaces
        echo '<div class="legend-color ' . $sColorName . '"></div> // Color style name
        <div class="legend-project">' . $category->name . '</div>'; // Taxonomy name
    } 
?>

Так, например, теперь у $category->name «Мой первый проект» есть соответствующее имя таблицы стилей my-first-project, которое вы можете добавить в свою таблицу стилей и стиль. Обратите внимание, что в <div class="legend-color ' я добавляю имя стиля к существующему классу, чтобы результирующий класс был "legend-color my-first-project": т.е. два стиля. Класс с жестким кодом «legend-color» содержит все атрибуты стиля, кроме background-color, который находится в $sColorName.

Работает нормально здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...