私と一緒に。まず、おすすめのスライダーに関する記事のスクリプト全体を次に示します。
<div id="featured" class="<?php if ( $responsive ) echo 'flexslider' . $featured_auto_class; else echo 'et_cycle'; ?>">
<a id="left-arrow" href="#"><?php esc_html_e('Previous','Aggregate'); ?></a>
<a id="right-arrow" href="#"><?php esc_html_e('Next','Aggregate'); ?></a>
<?php if ( $responsive ) { ?>
<ul class="slides">
<?php } else { ?>
<div id="slides">
<?php } ?>
<?php global $ids;
$ids = array();
$arr = array();
$i=0;
$featured_cat = get_option('aggregate_feat_cat');
$featured_num = (int) get_option('aggregate_featured_num');
if (get_option('aggregate_use_pages') == 'false') query_posts("showposts=$featured_num&top=billboard"); // set which slug in custom taxonomy TOP it should filter
else {
global $pages_number;
if (get_option('aggregate_feat_pages') <> '') $featured_num = count(get_option('aggregate_feat_pages'));
else $featured_num = $pages_number;
query_posts(array
('post_type' => 'page',
'orderby' => 'menu_order',
'order' => 'ASC',
'post__in' => (array) get_option('aggregate_feat_pages'),
'showposts' => (int) $featured_num
));
} ?>
<?php if (have_posts()) : while (have_posts()) :
global $post;
if (!$first_time) // START custom first post
{
$post_id = 105; // This is the ID of the first post to be displayed on slider
$post = get_post($post_id);
$first_time = 1;
}
else the_post(); // END custom first post
?>
<?php if ( $responsive ) { ?>
<li class="slide">
<?php } else { ?>
<div class="slide">
<?php } ?>
<?php
$width = $responsive ? 960 : 958;
$height = 340;
$small_width = 95;
$small_height = 54;
$titletext = get_the_title();
$thumbnail = get_thumbnail($width,$height,'',$titletext,$titletext,false,'Featured');
$arr[$i]['thumbnail'] = get_thumbnail($small_width,$small_height,'',$titletext,$titletext,false,'Small');
$arr[$i]['titletext'] = $titletext;
$thumb = $thumbnail["thumb"];
print_thumbnail($thumb, $thumbnail["use_timthumb"], $titletext, $width, $height, ''); ?>
<div class="featured-top-shadow"></div>
<div class="featured-bottom-shadow feat<?php $category = get_the_category(); echo $category[0]->category_nicename; ?>"></div>
<div class="featured-description">
<div class="feat_desc">
<h2 class="featured-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p><?php $excerpt = get_the_excerpt(); echo string_limit_words($excerpt,20); ?></p>
</div>
</div> <!-- end .description -->
<?php if ( $responsive ) { ?>
</li> <!-- end .slide -->
<?php } else { ?>
</div> <!-- end .slide -->
<?php } ?>
<?php $ids[] = $post->ID; $i++; endwhile; endif; wp_reset_query(); ?>
<?php if ( $responsive ) { ?>
</ul> <!-- end .slides -->
<?php } else { ?>
</div> <!-- end #slides -->
<?php } ?>
</div> <!-- end #featured -->
query_posts
カスタム分類からの一定量の投稿top=billboard
。コードの次の部分:
<?php if (have_posts()) : while (have_posts()) :
global $post;
if (!$first_time) // START custom first post
{
$post_id = 105; // This is the ID of the first post to be displayed on slider
$post = get_post($post_id);
$first_time = 1;
}
else the_post(); // END custom first post
?>
返されたリストの最初の投稿に投稿ID 105
を追加します。これにより、どの投稿を最初に表示するかを制御できます。 問題は:投稿ID 105
がカスタム分類top=billboard
に既に含まれている場合、リストに2回表示されます...上記のcustom first post
スクリプト、およびカスタム分類top=billboard
に追加されたため。
投稿ID 105
がカスタム分類top=billboard
に存在する場合、コードを調整して、notを2回表示する必要があります(最初の投稿としてのみ)。
さてそれで私はあなたのコードを読もうとしました、そして失敗して、それが現在読めないのでそれを再フォーマットしました、そしてどんなエラーもこの読めないことによってあいまいにされます。私はあなたの人生を無限に楽にするために正しくインデントして標準化されたフォーマットに従うことの重要性を強調することはできません。
<?php
$featured_class = 'et_cycle';
$tag = 'ul';
$attr = 'class';
if($responsive){
$featured_class = 'flexslider' . $featured_auto_class;
$tag = 'div';
$attr = 'id';
}
?>
<div id="featured" class="<?php echo $featured_class; ?>">
<a id="left-arrow" href="#"><?php esc_html_e( 'Previous', 'Aggregate' ); ?></a>
<a id="right-arrow" href="#"><?php esc_html_e( 'Next', 'Aggregate' ); ?></a>
<?php
echo '<'.$tag.' '.$attr.'="slides">';
global $ids;
$ids = array();
$arr = array();
$i=0;
$featured_cat = get_option( 'aggregate_feat_cat' );
$featured_num = (int) get_option( 'aggregate_featured_num' );
$query_args = array();
if ( get_option( 'aggregate_use_pages' ) == 'false' ){
// set which slug in custom taxonomy TOP it should filter
$query_args = array(
'showposts' => $featured_num,
'top' => 'billboard'
);
}else {
global $pages_number;
if ( get_option( 'aggregate_feat_pages' ) <> '' ){
$featured_num = count( get_option( 'aggregate_feat_pages' ) );
} else{
$featured_num = $pages_number;
}
query_args = array(
'post_type' => 'page',
'orderby' => 'menu_order',
'order' => 'ASC',
'post__in' => (array) get_option( 'aggregate_feat_pages' ),
'showposts' => (int) $featured_num
);
}
// needs to die, use WP_Query instead
query_posts($query_args);
if ( have_posts() ) {
while ( have_posts() ) {
global $post;
// START custom first post
if ( !$first_time ) {
$post_id = 105; // This is the ID of the first post to be displayed on slider
$post = get_post( $post_id );
$first_time = 1;
}else{
the_post(); // END custom first post
}
if ( $responsive ) {
echo '<li';
}else {
echo '<div';
}
echo ' class="slide">';
$width = $responsive ? 960 : 958;
$height = 340;
$small_width = 95;
$small_height = 54;
$titletext = get_the_title();
$thumbnail = get_thumbnail( $width, $height, '', $titletext, $titletext, false, 'Featured' );
$arr[$i]['thumbnail'] = get_thumbnail( $small_width, $small_height, '', $titletext, $titletext, false, 'Small' );
$arr[$i]['titletext'] = $titletext;
$thumb = $thumbnail["thumb"];
print_thumbnail( $thumb, $thumbnail["use_timthumb"], $titletext, $width, $height, '' );
?>
<div class="featured-top-shadow"></div>
<div class="featured-bottom-shadow feat<?php $category = get_the_category(); echo $category[0]->category_nicename; ?>"></div>
<div class="featured-description">
<div class="feat_desc">
<h2 class="featured-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p><?php $excerpt = get_the_excerpt(); echo string_limit_words( $excerpt, 20 ); ?></p>
</div>
</div> <!-- end .description -->
<?php if ( $responsive ) { ?>
</li> <!-- end .slide -->
<?php } else { ?>
</div> <!-- end .slide -->
<?php } ?>
<?php $ids[] = $post->ID; $i++;
}
}
wp_reset_query();
echo '</'.$tag.'>';
?>
</div> <!-- end #featured -->
私はいくつかの単純化を行い、ifステートメントを入れ替えたので、それらはすべて、速記と標準の混乱ではなく{}
を使用します。
ここにはたくさんの問題があります、最後の問題はwp_reset_queryです、そして最も大きな鐘はquery_posts
の使用です。
Query_postsを使用せず、代わりにWP_Query
またはget_posts
を使用することを強くお勧めします。
ここでの原因はあなたのループです:
while ( have_posts() ) {
global $post;
// START custom first post
if ( !$first_time ) {
$post_id = 105; // This is the ID of the first post to be displayed on slider
$post = get_post( $post_id );
$first_time = 1;
}else{
the_post(); // END custom first post
}
ここで私たちはあなたの投稿ループの始まりを見ます、それは追加の投稿があるかどうかチェックし、そして次に進むためにthe_post
を呼び出します。
ただし、最初の投稿が行われたときは、the_post
を呼び出さないため、ループは進みません。これはループの動作方法ではなく、常に常にthe_post
を呼び出してください。
代わりに、105の投稿を含まないようにクエリに指定することをお勧めします(投稿IDのハードコーディングを避けることもできますが、必ずしも105になるとは限りません)。
そのため、まずはじめに、クエリにpost__not_in
パラメータを使用します。
$query_args['post__not_in'] = array(105);
私はpre_get_posts
を使います。例:
add_action('pre_get_posts','search_filterr');function search_filterr($query) {
if ( !is_admin() && $query->is_main_query() ) {
if ( $query->is_search ) { //$query->is_category or etc...except is_page()
$arrs[]='post';
$arrs[]='page';
$arrs[]='my_carss';
$query->set('post_type', $arrs );
}
}
}