0

_posts フィルターを使用して、クエリされた各投稿にオブジェクトを追加します。追加されたオブジェクトにアクセスすると、$postまたはを使用して異なる結果が得られますget_post
オブジェクトを投稿に添付するコードは次のとおりです。

add_filter( 'the_posts', 'populate_posts_obj', 10,2 );
function populate_posts_obj( $posts, $query ){
  if ( !count( $posts ) ||  !isset($query->query['post_type']) )
    return $posts;
  if( in_array( $query->query['post_type'], get_valid_grade_types())){
      foreach ( $posts as $post ) {
         if (  $obj = new Gradebook( $post->ID ) )
            $post->gradebook = $obj;
      }
   }
  return $posts;
}

次に、 経由で obj にアクセスし、obj を$post取得する場合と取得しない場合があります (同じ投稿であっても):

function get_the_gradebook(){
  global $post;
  return isset($post->gradebook) ? $post->gradebook : null;
}

経由で obj にアクセスしget_post()、常に obj を取得します。

function get_the_gradebook(){
global $post;
  $p = get_post($post->ID);
  return isset($p->gradebook) ? $p->gradebook : null;
}

バージョンそのままでもいいget_post()のですが、なぜ違うのか分かれば助かります。

追加情報:

各投稿に obj を添付する理由を尋ねると、WordPress が最初にキャッシュ プロセスを処理する可能性があると思います。次に、標準の WP 投稿で作業しているかのように、他のキャッシュ プラグインを obj で使用できます。

4

2 に答える 2

0

$post は、WordPress が現在の「投稿」 (投稿/ページ/カスタム投稿タイプ) であると見なすものであり、予期しないデータを提供することがよくあります。これは、テンプレートで WP_Query を実行する場合、または複数の「投稿」からのデータを使用するテンプレートがある場合に特に当てはまります。

get_post()データを取得したい ID で使用することで、本当に必要なデータを確実に取得できます。

于 2013-07-13T18:27:09.433 に答える