Каков наиболее эффективный способ управления многоуровневыми отношениями с помощью CMS WordPress Pods?

Я впервые использую Pods в Wordpress, так что простите меня, если на этот вопрос будет легко ответить. Я немного искал ответ на эту проблему, но не нашел ничего, что конкретно отвечало бы на мой вопрос.

У меня есть два разных вида стручков.

  1. Области обучения: такие как физика, социология или компьютеры
  2. Тематические исследования: Подробная информация о тематических исследованиях, проведенных в различных областях обучения.

В каждом модуле тематического исследования есть поле отношений, связывающее его с конкретным модулем области изучения. (В этом примере предположим, что конкретное тематическое исследование может быть связано только с одной областью исследования. Это может измениться в будущем, но на данный момент этого должно быть достаточно.)

Каждая область исследования имеет поле отношения, связывающее ее с определенной страницей WP (например, подробная страница, которая описывает детали для области изучения физики).

Что я хочу сделать, так это, просматривая различные тематические исследования, иметь возможность получить ссылку на страницу WP, с которой связана ее конкретная область внимания.

Я технически знаю, КАК это сделать, но я не уверен, что это самый эффективный способ сделать это. Это то, что я сделал, и это, кажется, работает:

<?php 
$case_studies = new Pod('case_studies');
$case_studies->findRecords(null, 200);
$total_rows = $case_studies->getTotalRows();

if ($total_rows > 0) {
        while ($case_studies->fetchRecord()) {
                // RETRIEVE AREA OF FOCUS DETAILS
                $aof = $case_studies->get_field('area_of_focus');
                $aof = $aof[0];

                // GET AREA OF FOCUS POD
                $aofs = new Pod('areas_of_focus');
                $params = array('where' => "t.id like '".intval($aof['id'])."'");
                $aofs->findRecords($params);
                if ($aofs->fetchRecord()) {
                        $page = $aofs->get_field('focus_page');
                        $area_of_focus_url = get_permalink($page[0]['ID']);
                        echo '<a href="'.$area_of_focus_url.'">'. $aof['name'].'</a>';
                } else {
                        echo $aof['name'];
                }

                // CASE STUDY DETAILS GO HERE
        }
}

?>

Кажется, это как минимум алгоритм O (n²), если не больше. Я действительно не знаю внутренностей класса Pod, поэтому он может быть еще дороже. Также это будет выполнять несколько запросов MySQL вместо одного запроса.

Было бы лучше, если бы я использовал несколько объединений MySQL в начальном запросе примера, чтобы мне не приходилось запускать кучу других запросов? Или есть ли какие-либо другие функции в самих модулях, которые могут позволить мне получить более подробную информацию о полях отношений?

Мы будем очень благодарны за любые советы.


person David Stinemetze    schedule 24.01.2011    source источник
comment
Вы когда-нибудь находили практическое решение этой проблемы?   -  person Manny Calavera    schedule 30.10.2011
comment
Не с PodsCMS. Я просто перестал использовать Pods вообще. Я использую плагин Advanced Custom Fields ‹ wordpress.org/extend/plugins/advanced-custom- полей › прямо сейчас и просто создайте свои собственные типы записей ‹ codex.wordpress.org/Post_Types › ›. Для того, для чего мне это было нужно, это было довольно эффективно.   -  person David Stinemetze    schedule 04.11.2011


Ответы (1)


На самом деле вы можете пойти очень глубоко с get_field, проходя отношения.

Попробуйте это для размера:

$page_ID = $case_studies->get_field('area_of_focus.focus_page.ID');

Pods сделают всю работу за вас, вы сможете пройти кучу уровней, и вы даже можете сделать то же самое с findRecords (начиная с Pods 1.12).

person Scott Kingsley Clark    schedule 23.12.2011
comment
Прошло некоторое время с тех пор, как я изучил это. Я должен буду дать ему шанс снова, когда у меня будет шанс. Спасибо. - person David Stinemetze; 05.01.2012