Wordpress 内にカスタム フィールドを持つカスタム投稿タイプを作成しました。ループを実行し、うまく機能する新しいページ テンプレートを作成しました。ホームページのサイドバーに同様のループを追加しようとしていますが、正しく機能しません。
まず、自分のページ テンプレートの作業コードです。
<h2>Upcoming Events</h2>
<?php $todaysDate = date('Y/m/d');
$event_query = new WP_query('post_type=events&posts_per_page=-1&post_status=publish&meta_key=event_date&meta_compare=>=&meta_value=' . $todaysDate . '&orderby=meta_value&order=ASC');
?>
<ul id="featured_event_list">
<?php if ($event_query->have_posts()): ?>
<?php while ($event_query->have_posts()) : $event_query->the_post(); ?>
<li>
<h3><?php the_title(); ?></h3>
<p>
<?php if ( get_post_meta($post->ID, 'event_featuring', true) ) : ?>
<strong>Featuring:</strong> <?php echo get_post_meta($post->ID, 'event_featuring', true) ?><br />
<?php endif; ?>
<?php if ( get_post_meta($post->ID, 'event_date', true) ) : ?>
<?php $event_date = get_post_meta($post->ID, 'event_date', true);
$new_event_date = date("F j, Y",strtotime($event_date)); ?>
<strong>Date:</strong> <?php echo $new_event_date ?>
<?php endif; ?>
<?php if ( get_post_meta($post->ID, 'event_end_date', true) ) : ?>
<?php $event_end_date = get_post_meta($post->ID, 'event_end_date', true);
$new_event_end_date = date("F j, Y",strtotime($event_end_date)); ?>
- <?php echo $new_event_end_date ?>
<?php endif; ?>
<br />
<?php if ( get_post_meta($post->ID, 'event_time', true) ) : ?>
<strong>Time:</strong> <?php echo get_post_meta($post->ID, 'event_time', true) ?><br />
<?php endif; ?>
<?php if ( get_post_meta($post->ID, 'event_location', true) ) : ?>
<strong>Location:</strong> <?php echo get_post_meta($post->ID, 'event_location', true) ?>
<?php endif; ?>
</p>
<p><?php the_excerpt(); ?></p>
</li>
<?php endwhile; ?>
<?php else: ?>
<li>Sorry, no upcoming events.</li>
<?php endif; ?>
</ul>
それは正常に動作しますが、そのコードの修正版を functions.php 内のウィジェットとして配置すると、動作しません:
<?php
function eventsWidget() { ?>
<div class="uwf_widget">
<h3 class="events"><span>Featured Events</span></h3>
<ul>
<?php
$todaysDate = date('Y/m/d');
$event_widget_query = new WP_query('post_type=events&posts_per_page=2&post_status=publish&meta_key=event_date&meta_compare=>=&meta_value=' . $todaysDate . '&orderby=meta_value&order=ASC');
?>
<?php if ($event_widget_query->have_posts()) :?>
<?php while ($event_widget_query->have_posts()) : $event_widget_query->the_post(); ?>
<?php $event_date = get_post_meta($post->ID, 'event_date', true);
$new_event_date = date("F j",strtotime($event_date)); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?> - <?php echo $new_event_date; ?> »</a></li>
<?php endwhile; else: ?>
<li>Sorry, no upcoming events.</li>
<?php endif; ?>
</ul>
<p class="more"><a href="/about-us/events/">more events »</a></p>
</div>
<?php } ?>
ここで、そのコードを (ホームページではなく) 通常のサイドバー内に配置すると、問題なく動作します。したがって、ホームページとサイドバーの複数のループには明らかに何か問題があります。ウィジェットを単純化して 2 つの「イベント」のみを取得すると、(post_type に関係なく) 2 つの投稿が取得されます。rewind_posts と wp_reset_query を試しましたが、他に何を試せばよいかわかりません。