2

Wordpressでポッドを使用するのはこれが初めてなので、これが少し簡単な質問である場合はご容赦ください。この問題の答えを少し探しましたが、私の質問に具体的に答えるものは見つかりませんでした。

2種類のポッドを作成しました。

  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結合を使用して、他のクエリを実行する必要がないようにした方がよいでしょうか。または、ポッド自体の中に、関係フィールドの詳細を取得できる他の関数はありますか?

ヒントをいただければ幸いです。

4

1 に答える 1

1

リレーションシップをトラバースすることで、実際にはget_fieldを非常に深く理解できます。

サイズについてはこれを試してください:

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

ポッドがすべての作業を行います。大量のレベルを深くすることができ、findRecordsでも同じことができます(ポッド1.12以降)

于 2011-12-23T21:45:55.050 に答える