Files
mingxu/ming-theme/single-ming_campaign.php
T
2026-09-23 09:29:09 +08:00

127 lines
6.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 單一投票活動頁.
*
* @package MING
*/
get_header();
$ming_cid = get_the_ID();
$ming_goal = (int) get_post_meta( $ming_cid, 'ming_goal', true ) ?: ming_vote_goal();
$ming_deadline = get_post_meta( $ming_cid, 'ming_deadline', true );
$ming_expired = ming_campaign_expired( $ming_cid );
$ming_uid = get_current_user_id();
$ming_voted = array();
$ming_voted_sk = array(); // pid => vid.
foreach ( $ming_uid ? (array) get_user_meta( $ming_uid, 'ming_voted_c' . $ming_cid, true ) : array() as $ming_e ) {
$ming_ep = explode( ':', (string) $ming_e );
$ming_voted[] = (int) $ming_ep[0];
if ( ! empty( $ming_ep[1] ) ) { $ming_voted_sk[ (int) $ming_ep[0] ] = (int) $ming_ep[1]; }
}
$ming_items = array();
foreach ( array_map( 'intval', (array) get_post_meta( $ming_cid, 'ming_products', true ) ) as $ming_pid ) {
$ming_prod = wc_get_product( $ming_pid );
if ( ! $ming_prod || 'publish' !== get_post_status( $ming_pid ) ) { continue; }
$ming_colors = ming_product_color_options( $ming_prod );
foreach ( $ming_colors as $ming_ci => $ming_co ) {
$ming_colors[ $ming_ci ]['votes'] = ! empty( $ming_co['vid'] ) ? (int) get_post_meta( $ming_co['vid'], 'ming_votes_c' . $ming_cid, true ) : 0;
}
// 預設選中色:商品預設屬性 > 使用者已投的色 > 第一個.
$ming_dslug = '';
$ming_defs = $ming_prod->get_default_attributes();
if ( ! empty( $ming_defs['pa_color'] ) ) { $ming_dslug = $ming_defs['pa_color']; }
$ming_sel = 0;
foreach ( $ming_colors as $ming_ci => $ming_co ) {
if ( $ming_co['slug'] && $ming_co['slug'] === $ming_dslug ) { $ming_sel = $ming_ci; break; }
}
if ( isset( $ming_voted_sk[ $ming_pid ] ) ) {
foreach ( $ming_colors as $ming_ci => $ming_co ) {
if ( ! empty( $ming_co['vid'] ) && $ming_co['vid'] === $ming_voted_sk[ $ming_pid ] ) { $ming_sel = $ming_ci; break; }
}
}
$ming_items[] = array(
'id' => $ming_pid,
'name' => $ming_prod->get_name(),
'link' => get_permalink( $ming_pid ),
'img' => get_the_post_thumbnail_url( $ming_pid, 'large' ),
'desc' => trim( wp_strip_all_tags( $ming_prod->get_short_description() ) ),
'colors' => $ming_colors,
'sel' => $ming_sel,
'votes' => (int) get_post_meta( $ming_pid, 'ming_votes_c' . $ming_cid, true ),
);
}
usort( $ming_items, function( $a, $b ) { return $b['votes'] - $a['votes']; } );
?>
<section class="page-hero">
<div class="wrap">
<p class="eyebrow reveal">NEW ARRIVAL · VOTE</p>
<h1 class="h1 reveal"><?php the_title(); ?></h1>
<p class="sub reveal">
<?php if ( $ming_expired ) : ?>
本活動已截止,感謝大家的參與。
<?php elseif ( $ming_deadline ) : ?>
活動截止:<?php echo esc_html( date_i18n( 'Y年n月j日 H:i', strtotime( $ming_deadline ) ) ); ?> · 每人每款一票
<?php else : ?>
告訴我們你最想要哪一款,呼聲最高的款式將優先生產。每人每款一票。
<?php endif; ?>
</p>
</div>
</section>
<section class="section">
<div class="wrap">
<?php if ( empty( $ming_items ) ) : ?>
<p class="vote-empty reveal">本活動尚未設定參與商品。</p>
<?php else : ?>
<div class="prod-grid vote-grid">
<?php foreach ( $ming_items as $ming_it ) :
$ming_pct = min( 100, round( $ming_it['votes'] / $ming_goal * 100 ) );
$ming_voted_this = in_array( $ming_it['id'], $ming_voted, true );
?>
<article class="pcard vcard reveal" data-id="<?php echo esc_attr( $ming_it['id'] ); ?>" data-cid="<?php echo esc_attr( $ming_cid ); ?>" data-goal="<?php echo esc_attr( $ming_goal ); ?>" data-vid="<?php echo esc_attr( ! empty( $ming_it['colors'][ $ming_it['sel'] ]['vid'] ) ? $ming_it['colors'][ $ming_it['sel'] ]['vid'] : 0 ); ?>">
<a class="ph" href="<?php echo esc_url( $ming_it['link'] ); ?>"><?php if ( $ming_it['img'] ) : ?><img src="<?php echo esc_url( $ming_it['img'] ); ?>" alt="<?php echo esc_attr( $ming_it['name'] ); ?>" loading="lazy"><?php endif; ?></a>
<div class="pb">
<h3><?php echo esc_html( $ming_it['name'] ); ?></h3>
<?php if ( $ming_it['desc'] ) : ?><p><?php echo esc_html( $ming_it['desc'] ); ?></p><?php endif; ?>
<?php if ( $ming_it['colors'] ) : ?>
<span class="colors vote-colors"><?php foreach ( $ming_it['colors'] as $ming_ci => $ming_col ) : ?>
<span class="cdot-wrap"><button type="button" class="cdot<?php echo $ming_ci === $ming_it['sel'] ? ' is-on' : ''; ?>" style="background:<?php echo esc_attr( $ming_col['hex'] ); ?>" title="<?php echo esc_attr( $ming_col['name'] ); ?>" aria-label="<?php echo esc_attr( $ming_col['name'] ); ?>" data-vid="<?php echo esc_attr( $ming_col['vid'] ); ?>"<?php if ( ! empty( $ming_col['img'] ) ) : ?> data-img="<?php echo esc_url( $ming_col['img'] ); ?>"<?php endif; ?> data-link="<?php echo esc_url( $ming_col['link'] ); ?>"></button><em class="cdot-n"><?php echo (int) $ming_col['votes']; ?></em></span>
<?php endforeach; ?></span>
<?php endif; ?>
<div class="vote-meta">
<span class="vcount"><b><?php echo esc_html( $ming_it['votes'] ); ?></b> 人想要</span>
<span class="vgoal">目標 <?php echo esc_html( $ming_goal ); ?> 人</span>
</div>
<div class="vote-bar"><i style="width:<?php echo esc_attr( $ming_pct ); ?>%"></i></div>
<?php if ( $ming_expired ) : ?>
<button type="button" class="vote-btn voted" disabled>已截止</button>
<?php else : ?>
<button type="button" class="vote-btn<?php echo $ming_voted_this ? ' voted' : ''; ?>"<?php echo $ming_voted_this ? ' disabled' : ''; ?>>
<?php echo $ming_voted_this ? '已支持 ✓' : '我想要這款'; ?>
</button>
<?php endif; ?>
</div>
</article>
<?php endforeach; ?>
</div>
<p class="vote-note reveal"><?php echo $ming_expired ? '感謝參與,結果將作為新品備貨依據。' : '登入會員後即可投票,每人每款一票。票數即時更新。'; ?></p>
<div class="vote-share reveal">
<p class="vote-share-text">覺得哪一款最該生產?分享給朋友一起來投票,讓呼聲被看見。</p>
<?php
ming_share_bar( array(
'title' => get_the_title() . '|MING 明命 新品許願池',
'text' => '我正在 MING 明命的新品許願池投票:' . get_the_title() . ',一起來許願,呼聲最高的款式將優先生產!',
'label' => '分享這個許願活動',
) );
?>
</div>
<?php endif; ?>
</div>
</section>
<?php
get_footer();