WordPress групповые таксономии для сообщений, основанных на отношениях acf - PullRequest
1 голос
/ 27 апреля 2019

У меня есть два типа сообщений: Teachers и Students.Типовые данные:

Тип сообщения учителей:

Teacher A
Teacher B
Teacher C 

и тип должности учеников:

Student A
Student B
Student C
and many more students

У меня также есть таксономия под названием student-role, которая имеет некоторыезначения:

Intern
Master Student
PhD Student

В типе должности учащегося я использую отношение ACF, чтобы назначить учителя учащемуся.Студент может иметь более одного учителя.

Например:

  • Student A является Intern и назначается Teacher A, а Teacher B
  • Student B является Master Student и присвоено Teacher C
  • Student C является PhD Student и назначено Teacher C

Я хочу создать пользовательскую страницу для teacher C, гдеЯ только показываю все student-role с.

Итак, есть страница для Учителя C, в которой должны быть указаны Master Student и PhD Student, поскольку в этой таксономии есть два студента.

Я пытался сначала получить всех студентов, затем все роли студентов, но не знал, что делать дальше, есть идеи?

$args = array(
    'posts_per_page' => -1,
    'post_type'  => 'students',
    'meta_query' => array(
        array(
            'key'     => 'acf_relationship',
            'value'   => 'Manual ID OF Teacher',
            'compare' => 'LIKE'
        )
    )
);
// get all posts for teacher with ID
$all_posts = get_posts( $args );

// get all student roles
$tax_terms = get_terms( 'student-role');

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

ПРИМЕЧАНИЕ: поле ACF, назначаемое ученику, должно возвращать только идентификатор публикации, а не публикацию объекта (вы можете установить это путем редактирования поля acf)

Здесь запрос для учителя C (идентификатор публикации учителя c = 1662)

$args = array(
    'numberposts'   => -1,
    'post_type'     => 'student',
);
$the_query = new WP_Query( $args );
?>
<?php if( $the_query->have_posts() ): ?>
    <ul>
    <?php while( $the_query->have_posts() ) : $the_query->the_post(); 
        if( in_array('1662', get_field('assign')) ) : ?>
        <li>
            <a href="<?php the_permalink(); ?>">                
                <?php the_title(); ?>
            </a>
        </li>
        <?php endif; 
    endwhile; ?>
    </ul>
<?php endif; ?>
<?php wp_reset_query();   ?>

В цикле while можно отображать заголовок, роль в качестве таксономии, содержание и т. Д.

0 голосов
/ 27 апреля 2019

Ваша пользовательская страница называется single-teacher.php?

  1. Сначала вам нужно создать файл single-teacher.php, в котором вы будете отображать страницу учителя.
  2. Внутри страницы учителя вам нужно получить объект ученика, используя отношение ACF.
  3. У вас будет идентификатор студента внутри этого объекта. Затем вы можете легко получить его таксономию.

Проверьте этот код.

<?php
// the get_the_ID() will get the teacher's ID since you are in single-teacher.php
// $the_post will be the student object

// $the_posts is the student's object
$the_posts = get_field('acf_relationship', get_the_ID()); 

if( $the_posts ): ?>
 <ul>
   <?php foreach( $the_posts as $p ): // variable must NOT be called $post ?>
    <li>
        <!-- This will display the student title or name -->
        <a href="<?php echo get_permalink( $p->ID ); ?>"><?php echo get_the_title( 
           $p->ID ); ?></a> 

        <!-- This will display the student's taxononmy -->
        <?php
        $the_terms = get_the_terms( $p->ID, 'your_taxonomy_name' );
        $t_url = '';
        $t_name = '';
        foreach ($the_terms as $t) {
            $t_url = get_term_link( $t->slug, 'your_taxonomy_name');
            $t_name = $t->name;
        }
        ?>
        <!-- Print student role list with link -->
        <span>Your student roles: <a href="<?php echo $t_url; ?>">
           <?php echo $t_name; ?></a>
        </span>
    </li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
...