Как мне отфильтровать пользовательские сообщения по полю в wordpress?

Хорошо, очень простая задача, я просто плохо разбираюсь в PHP.

У меня есть страница, на которой я хочу перечислить некоторых сотрудников, используя стилизованный список. Вот страница - http://www.themontessoripeople.co.uk/montesori/?post_type=people

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

Вот как я хочу отображать страницу - http://i47.tinypic.com/oqymwh.jpg

Настраиваемое поле «иерархия» содержит переменные комнаты либо «management», «babies_room» и «toddlers_room».

Как мне изменить приведенный ниже код, чтобы отфильтровать сообщения по значению, содержащемуся в <?php print_custom_field('hierarchy'); ?>?

<?php $col = 1; ?>      
    <?php if (have_posts()) : ?>        
        <?php while (have_posts()) : the_post(); ?>         
            <?php if ($col == 1) echo "<div class=\"row\">"; ?>

                <div class="post col<?php echo $col;?>" id="post-<?php the_ID(); ?>">

                            <div class="people-spacer">

                                <div class="people"><a class="animate" >
                                <div class="bio">
                                <p class="titles"><?php the_title(); ?><br/>
                                <span class="job"> <?php print_custom_field('job'); ?></span> </p><br />
                                </div>
                                <img src="<?php print_custom_field('staff_image:to_image_src'); ?>" width="160" height="160" alt="<?php the_title(); ?>-image" />
                                </div>
                                <div class="people-link-edit"><?php edit_post_link('Edit Post', ''); ?></div>
                            </div>
                </div>

            <?php if ($col == 1) echo "</div>"; (($col==1) ? $col=2 : $col=2); ?>   
        <?php endwhile; ?>

Спасибо, Бен.

Вот рабочий код, показывающий два набора отфильтрованных результатов для справки -

<?php $col = 1; ?>
<?php if (have_posts()) : ?>


<div class="text-box">

<h2>Management</h2>
<?php while (have_posts()) : the_post(); ?>
<?php if (get_custom_field('hierarchy') != "management") continue; ?>

<?php if ($col == 1) echo "<div class=\"row\">"; ?>
<div class="post col<?php echo $col;?>" id="post-<?php the_ID(); ?>">
 <div class="people-spacer">
  <div class="people"><a class="animate" >
   <div class="bio">
    <p class="titles">
     <?php the_title(); ?>
     <br/>
     <span class="job"> <?php print_custom_field('job'); ?></span> </p>
    <br />
   </div>
   <img src="<?php print_custom_field('staff_image:to_image_src'); ?>" width="160" height="160" alt="<?php the_title(); ?>-image" /> </div>
  <div class="people-link-edit">
   <?php edit_post_link('Edit Post', ''); ?>
  </div>
 </div>
</div>
<?php if ($col == 1) echo "</div>"; (($col==1) ? $col=2 : $col=2); ?>
<?php endwhile; ?>

</div><!-- close text box -->


<div class="text-box">

<h2>Babies Room</h2>

<?php while (have_posts()) : the_post(); ?>
<?php if (get_custom_field('hierarchy') != "babies_room") continue; ?>

<?php if ($col == 1) echo "<div class=\"row\">"; ?>
<div class="post col<?php echo $col;?>" id="post-<?php the_ID(); ?>">
 <div class="people-spacer">
  <div class="people"><a class="animate" >
   <div class="bio">
    <p class="titles">
     <?php the_title(); ?>
     <br/>
     <span class="job"> <?php print_custom_field('job'); ?></span> </p>
    <br />
   </div>
   <img src="<?php print_custom_field('staff_image:to_image_src'); ?>" width="160" height="160" alt="<?php the_title(); ?>-image" /> </div>
  <div class="people-link-edit">
   <?php edit_post_link('Edit Post', ''); ?>
  </div>
 </div>
</div>
<?php if ($col == 1) echo "</div>"; (($col==1) ? $col=2 : $col=2); ?>
<?php endwhile; ?>

</div><!-- close text box -->

person Sue.My.Chin    schedule 25.09.2012    source источник
comment
Я думаю, что на этот вопрос ответят быстрее, если его спросят на сайте обмена стеками wordpress.   -  person Kristian    schedule 26.09.2012
comment
Поверьте мне, это не так. Я уже дважды спрашивал - wordpress.stackexchange.com/questions/66216/: s   -  person Sue.My.Chin    schedule 26.09.2012
comment
Обмен стеками wordpress даже близко не так полезен, как переполнение стека. Большинство вопросов WP можно сформулировать и обобщить так, чтобы они были просто вопросами программирования (и многие программисты знают основы работы PHP-платформы WordPress).   -  person Xhynk    schedule 26.09.2012


Ответы (2)


Я упростил ваш код. Также добавлен фильтр:

<?php
    $col = 1;
    while (have_posts())
    {
        the_post();
        if ($col == 1) echo "<div class=\"row\">";

        // filter
        $hierarchy = get_custom_field('hierarchy');
        // if it does not match continue (skip)
        if ($hierarchy != "boss") continue;
        // if it matches continue (skip)
        //if ($hierarchy == "notboss") continue;

        // needed fields
        $id = the_ID();
        $job = get_custom_field('job');
        $title = the_title();
        $img = get_custom_field('staff_image:to_image_src');
        $edit = edit_post_link('Edit Post', '');

        echo <<< END
                <div class="post col$col" id="post-$id">
                    <div class="people-spacer">
                        <div class="people"><a class="animate" >
                        <div class="bio">
                        <p class="titles">$title<br/>
                        <span class="job">$job</span> </p><br />
                        </div>
                        <img src="$img" width="160" height="160" alt="$title-image" />
                        </div>
                        <div class="people-link-edit">$edit</div>
                    </div>
                </div>
END;

        if ($col == 1) echo "</div>";
        (($col==1) ? $col=2 : $col=2);
    }
?>

Изменить: get_custom_field вместо print_custom_field.

person Andreas Rehm    schedule 25.09.2012
comment
Привет, Андреас, спасибо за уделенное время. Я добавил код в файл шаблона, и при просмотре страницы он не отображался. Я пробовал добавлять фильтры к исходному коду, и он просто печатает значение рядом с каждым сообщением. Я подумал, что это может быть простая синтаксическая ошибка, нарушающая его, но DW ничего не вернул. Если вы хотите попробовать еще раз, я могу дать вам логин на тестовом сайте, и вы сможете исключить вероятность того, что я его испорчу. В тесте есть все для тестирования. Еще раз спасибо, Бен. - person Sue.My.Chin; 26.09.2012
comment
пожалуйста, попробуйте прокомментировать // часть if ($ иерархия) - person Andreas Rehm; 26.09.2012
comment
Я пробовал исправленный код, но страница по-прежнему не загружается :( У меня просто белая страница. Я беспокоюсь, что помещаю ее не в то место, или что-то, что у меня на странице уже находится в противоречии. Если будьте так любезны вот тестовый сайт - [ссылка] irishofcourse.co.cc/montesori/wp-admin/profile.php?updated=true логин: s14 pass: rehm Шаблон, который я тестирую, - это главный шаблон индекса (index.php). страница, на которую влияет функция irishofcourse.co.cc/montesori/?post_type=people Можете напортачить, я больше не использую его для тестирования. Еще раз спасибо, Бен. - person Sue.My.Chin; 26.09.2012
comment
Андреас, мне как-то удалось заставить его работать! Невероятно. Большое спасибо за вашу помощь, это был ваш код, который я вырезал и использовал, чтобы заставить его работать. Я добавлю рабочий код к вопросу, чтобы все увидели результат. Спасибо еще раз. - person Sue.My.Chin; 26.09.2012

Вы можете определить аргументы запроса в query_posts($args) - см. query_posts. Может ты попробуешь get_posts

person Philipp    schedule 25.09.2012
comment
Не используйте query_posts, блэч. Вместо этого используйте класс WP_Query. - codex.wordpress.org/Class_Reference/WP_Query - person Xhynk; 26.09.2012