0

私は現在、ページとその階層がカテゴリを模倣するプロジェクトに取り組んでおり、各「カテゴリページ」のクエリは正常に機能しますが、最上位ではすべての孫ページをクエリし、子ページをスキップしたいと考えています。
ここでの別の質問では、子供と孫を探すように指摘されたのと同じ質問をしています

ただし、コードは何も結果をもたらしません。クエリはエラーを返さず、空を返すだけです。見てください。

<div id="children">
<dl>
<?php query_posts('static=true&posts_per_page=-1&child_of='.$id.'&order=ASC'); ?>
<?php if(have_posts()) : while (have_posts()) : the_post(); ?>
<?php     $inner_query = new WP_Query("post_type=page&posts_per_page=-1&child_of={$id}&order=ASC");
while ($inner_query->have_posts()) : $inner_query->the_post(); ?>
<dt><a href="<?php the_permalink();?>"><?php the_title();?>:</a></dt>
<dd style=""><em><?php the_excerpt(); ?></em></dd>
<?php endwhile; endwhile; endif; ?>
</dl>
</div>

$id置き換えられたthe_ID();と思いますが、これが結果を返さない理由がわかりません。

ここで何がうまくいかないのですか?

4

1 に答える 1

0

ここで答えを見つけました。これが私のアプリケーションで機能することは認めますが、コードが正確に何をしているのかはわかりません。確かに、クエリに別のクエリを問い合わせて、孫がいるかどうかを確認していますが、詳細については少し迷っていますimplode() はそのためのものです。

<?php
// set the id of current page
$gen1_ids = get_the_ID(); 
// query the id for children (or at least that's what I think this query does)
$gen2 = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE $wpdb->posts.post_parent IN ($gen1_ids) AND $wpdb->posts.post_type = 'page' AND $wpdb->posts.post_status = 'publish' ORDER BY $wpdb->posts.ID ASC");
$gen2_ids = implode($gen2,', ');

//query children if they have children
$gen3 = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE $wpdb->posts.post_parent IN ($gen2_ids) AND $wpdb->posts.post_type = 'page' AND $wpdb->posts.post_status = 'publish' ORDER BY $wpdb->posts.ID ASC"); 
$gen3_ids = implode($gen3,', ');
$args=array(
  'post__in' => $gen3,
  'post_type' => 'page',
  'post_status' => 'publish',
  'posts_per_page' => -1,
  'caller_get_posts'=> 1
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
  while ($my_query->have_posts()) : $my_query->the_post(); 

// Your while code here 

 endwhile; 
} //endif
wp_reset_query();  // Restore global post data stomped by the_post().

?>
于 2013-07-16T08:15:53.103 に答える