我想显示即将举行的音乐会列表。 每场音乐会都有两个属性:日期和地点。
我试图通过显示所有变化来展示下一场音乐会。 这就是我到目前为止所做的:
<?php
global $woocommerce, $product, $post, $re_wcvt_options;
$available_variations = $product->get_available_variations();
$attributes = $product->get_attributes();
?>
<ul>
<?php foreach ($available_variations as $prod_variation) : ?>
<?php
// get some vars to work with
$post_id = $prod_variation['variation_id'];
$post_object = get_post($post_id);
?>
<li>
<?php foreach ($prod_variation['attributes'] as $attr_name => $attr_value) : ?>
<?php
// Get the correct variation values
if (strpos($attr_name, '_pa_')){ // variation is a pre-definted attribute
$attr_name = substr($attr_name, 10);
$attr = get_term_by('slug', $attr_value, $attr_name);
$attr_value = $attr->name;
} else { // variation is a custom attribute
}
echo $attr_value;
?>
<?php endforeach;?>
</li>
<?php endforeach;?>
</ul>
使用此解决方案的问题在于它仅适用于产品,仅适用于一种产品。我无法显示具有不同位置和日期(变体)的多个音乐会(产品)列表。
所以我尝试使用循环显示产品/音乐会,并按照自定义字段排序。
我过去曾为一个简单的自定义帖子类型做过。 这就是解决方案:
<?php
$today_query = date ('Ymd');
$args = array(
'post_type' => array( 'concert' ),
'posts_per_page' => '10',
'meta_key' => 'date',
'meta_compare' => '>=',
'meta_value' => $today_query,
'orderby' => 'meta_value',
'order' => 'ASC',
);
$query = new WP_Query( $args ); ?>
代码按元字段对帖子进行排序,并在将来仅显示音乐会。 我唯一不理解的是如何使用单个变体中的元字段?!
有人有解决方案吗?
答案 0 :(得分:1)
add_action( 'pre_get_posts', 'sort_products' );
function sort_products( $query )
{
// If inside dashboard, skip sorting
if (is_admin()){
return;
}
// Check of query have woocommerce post type
if (is_post_type_archive('product')){
$query->set('meta_key', 'date');
$query->set('meta_compare' , '>=');
$query->set('meta_value' , time());
$query->set('orderby', 'meta_value');
}
return $query;
}