我编写了一个简短的代码来使用事件插件(该插件创建事件的自定义post类型)。我想从数据库中提取使用特定类别的所有未来事件,并按照事件日期的顺序在页面上列出它们。事件正在显示,但类别选择不起作用,它还显示过去的事件。
以下是我的短代码:
/* Exhibitions Shortcode */
add_shortcode( \'event_list\', \'eventList\' );
function eventList( $atts ) {
ob_start();
$query = new WP_Query( array(
\'post_type\' => \'event\',
\'tax\' => \'\',
\'post_status\' => \'publish\',
\'date_query\' => array(
array(
\'column\' => \'event_start_date\',
\'after\' => date(\'F j, Y\'),
),
),
\'posts_per_page\' => \'\',
\'order\' => \'ASC\',
\'orderby\' => \'event_start_date\',
) );
if ( $query->have_posts() ) { ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<div id="post-<?php the_ID(); ?>" class="eventListing">
<div class="column oneThird">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } ?>
</div>
<div class="column twoThird last">
<a href="<?php the_permalink(); ?>"><h3><?php the_title(); ?></h3></a>
<?php echo get_the_content( $more_link_text, $stripteaser ); ?>
</div>
</div>
<?php endwhile;
wp_reset_postdata(); ?>
<?php $myvariable = ob_get_clean();
return $myvariable;
}
}
/* END Exhibitons */
使用的快捷码是[event\\u list tax=“exhibitions”posts\\u per\\u page=“3”]
使用类别更新代码:
/* Exhibitions Shortcode */
add_shortcode( \'event_list\', \'eventList\' );
function eventList( $atts ) {
ob_start();
$query = new WP_Query( array(
\'post_type\' => \'event\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'event-categories\',
\'field\' => \'slug\',
\'terms\' => $atts[\'tax\'],
),
),
\'post_status\' => \'publish\',
\'date_query\' => array(
\'after\' => date(\'F j, Y\'),
\'column\' => \'event_start_date\',
),
\'posts_per_page\' => $atts[\'posts_per_page\'],
\'order\' => \'ASC\',
\'orderby\' => \'event_start_date\',
) );
if ( $query->have_posts() ) { ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<div id="post-<?php the_ID(); ?>" class="eventListing">
<div class="column oneThird">
<?php if ( has_post_thumbnail() ) { the_post_thumbnail(); } ?>
</div>
<div class="column twoThird last">
<a href="<?php the_permalink(); ?>"><h3><?php the_title(); ?></h3></a>
<?php echo get_the_content( $more_link_text, $stripteaser ); ?>
</div>
</div>
<?php endwhile;
wp_reset_postdata(); ?>
<?php $myvariable = ob_get_clean();
return $myvariable;
}
}
/* END Exhibitons */
最合适的回答,由SO网友:Sean Grant 整理而成
只要看一下你的代码,我就会看到一些我要调查的地方。
1) 我看不到通过短代码提供的$ATT有任何用处。特别是“tax”和“post\\u per\\u page”属性。
所以试着改变这一点;
\'tax\' => \'\',
对此:
\'tax_query\' => array(
array(
\'taxonomy\' => \'category\',
\'field\' => \'slug\',
\'terms\' => \'$atts[\'tax\']\',
),
),
与空白posts\\u per\\u页面相同:
\'posts_per_page\' => \'$atts[\'posts_per_page\']\',
看起来你已经修复了第1版。干得好。:)
2) 要解决日期问题,我们可能需要知道事件插件创建的自定义字段是如何存储事件日期的。
编辑:是。因此,创建自定义post类型的插件似乎也创建了自定义DB表。如果要获取event\\u start\\u日期,需要参考该自定义表。