107 lines
5.0 KiB
PHP
107 lines
5.0 KiB
PHP
<?php
|
||
/**
|
||
* Profile List Item — image-less list row for user center.
|
||
*
|
||
* 用于:
|
||
* - 我的文章 / 我的收藏 / 公开主页文章列表
|
||
*
|
||
* 通过 get_template_part() 的 $args 接收以下参数(保留 query var 兼容):
|
||
* - aksrt_profile_item_action: ['type'=>'edit'|'view'|'unfavorite', 'url'=>'...', 'label'=>'...']
|
||
* - aksrt_profile_item_status: 文章状态徽章文本(如 "草稿" / "私密")
|
||
*
|
||
* @package AKSRT
|
||
*/
|
||
|
||
defined('ABSPATH') || exit;
|
||
|
||
$action = isset($args['action']) ? $args['action'] : get_query_var('aksrt_profile_item_action', []);
|
||
if (!is_array($action)) {
|
||
$action = [];
|
||
}
|
||
$action_type = isset($action['type']) ? (string) $action['type'] : '';
|
||
$action_url = isset($action['url']) ? (string) $action['url'] : '';
|
||
$action_label = isset($action['label']) ? (string) $action['label'] : '';
|
||
|
||
$status_label = isset($args['status']) ? (string) $args['status'] : (string) get_query_var('aksrt_profile_item_status', '');
|
||
|
||
$post_id = get_the_ID();
|
||
$permalink = get_permalink();
|
||
$title = get_the_title();
|
||
$date_iso = get_the_date('c');
|
||
$date_label = get_the_date();
|
||
$excerpt = wp_trim_words(get_the_excerpt(), 30, '…');
|
||
$comment_count = (int) get_comments_number();
|
||
$categories = get_the_category() ?: [];
|
||
$tags = get_the_tags() ?: [];
|
||
?>
|
||
<article <?php post_class('profile-list-item'); ?>>
|
||
<div class="profile-list-item__main">
|
||
<div class="profile-list-item__head">
|
||
<h3 class="profile-list-item__title">
|
||
<a href="<?php echo esc_url($permalink); ?>"><?php echo esc_html($title); ?></a>
|
||
<?php if ($status_label) : ?>
|
||
<span class="profile-list-item__status-badge"><?php echo esc_html($status_label); ?></span>
|
||
<?php endif; ?>
|
||
</h3>
|
||
<time class="profile-list-item__date" datetime="<?php echo esc_attr($date_iso); ?>" title="<?php echo esc_attr($date_label); ?>">
|
||
<?php echo esc_html($date_label); ?>
|
||
</time>
|
||
</div>
|
||
|
||
<?php if ($excerpt) : ?>
|
||
<p class="profile-list-item__excerpt"><?php echo esc_html($excerpt); ?></p>
|
||
<?php endif; ?>
|
||
|
||
<div class="profile-list-item__meta">
|
||
<?php foreach ($categories as $cat) : ?>
|
||
<a href="<?php echo esc_url(get_category_link($cat->term_id)); ?>" class="profile-list-item__chip profile-list-item__chip--category">
|
||
<i class="fas fa-folder" aria-hidden="true"></i>
|
||
<span><?php echo esc_html($cat->name); ?></span>
|
||
</a>
|
||
<?php endforeach; ?>
|
||
|
||
<?php foreach (array_slice($tags, 0, 4) as $tag) : ?>
|
||
<a href="<?php echo esc_url(get_tag_link($tag->term_id)); ?>" class="profile-list-item__chip profile-list-item__chip--tag">
|
||
#<?php echo esc_html($tag->name); ?>
|
||
</a>
|
||
<?php endforeach; ?>
|
||
|
||
<span class="profile-list-item__meta-spacer"></span>
|
||
|
||
<span class="profile-list-item__meta-item profile-list-item__meta-item--comments" title="<?php esc_attr_e('评论数', 'aksrt'); ?>">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z"/></svg>
|
||
<span><?php echo esc_html((string) $comment_count); ?></span>
|
||
</span>
|
||
|
||
<?php if ($action_type && $action_url) :
|
||
$action_class = 'profile-list-item__action profile-list-item__action--' . sanitize_html_class($action_type);
|
||
$icon_svg = '';
|
||
switch ($action_type) {
|
||
case 'edit':
|
||
$icon_svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M12 20h9"/><path d="M16.5 3.5a2.12 2.12 0 1 1 3 3L7 19l-4 1 1-4Z"/></svg>';
|
||
break;
|
||
case 'unfavorite':
|
||
$icon_svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></svg>';
|
||
break;
|
||
case 'view':
|
||
default:
|
||
$icon_svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8S1 12 1 12Z"/><circle cx="12" cy="12" r="3"/></svg>';
|
||
break;
|
||
}
|
||
if ('unfavorite' === $action_type) :
|
||
?>
|
||
<button type="button" class="<?php echo esc_attr($action_class); ?>" data-post-id="<?php echo esc_attr((string) $post_id); ?>" data-action="unfavorite" title="<?php echo esc_attr($action_label); ?>">
|
||
<span class="profile-list-item__action-icon"><?php echo $icon_svg; // phpcs:ignore ?></span>
|
||
<span class="profile-list-item__action-label"><?php echo esc_html($action_label); ?></span>
|
||
</button>
|
||
<?php else : ?>
|
||
<a href="<?php echo esc_url($action_url); ?>" class="<?php echo esc_attr($action_class); ?>" title="<?php echo esc_attr($action_label); ?>">
|
||
<span class="profile-list-item__action-icon"><?php echo $icon_svg; // phpcs:ignore ?></span>
|
||
<span class="profile-list-item__action-label"><?php echo esc_html($action_label); ?></span>
|
||
</a>
|
||
<?php endif; ?>
|
||
<?php endif; ?>
|
||
</div>
|
||
</div>
|
||
</article>
|