fix(admin): move message row actions into a rightmost column

Add a dedicated operations column for viewing, marking read and deleting
messages. Keep the message cell focused on its title, excerpt and ID;
adjust column widths and empty-state colspan with regression coverage.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Fable 5 committed 2026-10-30 17:45:52 +08:00
1 parent 1902ba1e87
commit 479b324f95
3 files changed
+36 -18

No files matched your search

+10 -11
View File
@@ -97,14 +97,14 @@ trait UsersMenusMessagesList {
echo '</div><div class="aksrt-native-table-wrap">';
echo '<table class="wp-list-table widefat fixed striped aksrt-messages-admin__table"><thead><tr>';
echo '<td class="manage-column column-cb check-column"><label class="screen-reader-text" for="aksrt-msg-check-all">' . esc_html__('全选本页消息', 'aksrt') . '</label><input id="aksrt-msg-check-all" type="checkbox" data-aksrt-msg-check-all /></td>';
foreach (['title' => __('消息', 'aksrt'), 'type' => __('类型', 'aksrt'), 'user' => __('收件人', 'aksrt'), 'read' => __('状态', 'aksrt'), 'time' => __('发送时间', 'aksrt')] as $column => $label) {
foreach (['title' => __('消息', 'aksrt'), 'type' => __('类型', 'aksrt'), 'user' => __('收件人', 'aksrt'), 'read' => __('状态', 'aksrt'), 'time' => __('发送时间', 'aksrt'), 'actions' => __('操作', 'aksrt')] as $column => $label) {
echo '<th scope="col" class="column-' . esc_attr($column) . '">' . esc_html($label) . '</th>';
}
echo '</tr></thead><tbody>';
if ($items === []) {
$hint = $user_missing ? __('没有找到该收件人。', 'aksrt')
: ($this->message_filter_args($filters) === [] ? __('站内还没有任何通知。', 'aksrt') : __('当前筛选条件下没有消息。', 'aksrt'));
echo NativeUi::empty_row(6, __('暂无消息', 'aksrt'), $hint); // phpcs:ignore WordPress.Security.EscapeOutput -- builder escapes.
echo NativeUi::empty_row(7, __('暂无消息', 'aksrt'), $hint); // phpcs:ignore WordPress.Security.EscapeOutput -- builder escapes.
}
foreach ($items as $row) {
$this->render_message_row($row, $filters);
@@ -123,18 +123,11 @@ trait UsersMenusMessagesList {
'<th scope="row" class="check-column"><label class="screen-reader-text" for="aksrt-msg-%1$d">%2$s</label><input id="aksrt-msg-%1$d" type="checkbox" name="ids[]" value="%1$d" data-aksrt-msg-check /></th>',
$id, esc_html(sprintf(__('选择消息 #%d', 'aksrt'), $id))
);
echo '<td class="column-title"><button type="button" class="button-link row-title" data-aksrt-msg-view="' . esc_attr((string) $id) . '" aria-haspopup="dialog" aria-controls="aksrt-msg-detail">' . esc_html($title) . '</button>';
echo '<td class="column-title"><strong class="row-title">' . esc_html($title) . '</strong>';
if ($desc !== '' && $desc !== $title) {
echo '<div class="aksrt-messages-admin__desc">' . esc_html(mb_strimwidth($desc, 0, 160, '…')) . '</div>';
}
echo '<div class="aksrt-messages-admin__sub"><code>#' . esc_html((string) $id) . '</code></div>';
echo '<div class="aksrt-msg-row-actions">';
printf('<button type="button" class="button-link" data-aksrt-msg-view="%d" aria-haspopup="dialog" aria-controls="aksrt-msg-detail">%s</button>', $id, esc_html__('查看', 'aksrt'));
if ($unread) {
printf('<button type="button" class="button-link" data-aksrt-msg-action="mark_read" data-id="%d">%s</button>', $id, esc_html__('标记已读', 'aksrt'));
}
printf('<button type="button" class="button-link button-link-delete" data-aksrt-msg-action="delete" data-id="%d">%s</button>', $id, esc_html__('删除', 'aksrt'));
echo '</div>';
$this->render_message_detail_template($row);
echo '</td>';
printf(
@@ -156,7 +149,13 @@ trait UsersMenusMessagesList {
esc_attr($ts ? gmdate('c', $ts) : ''), esc_html($this->message_time($created)),
$ts ? '<div class="aksrt-messages-admin__sub">' . esc_html(sprintf(__('%s前', 'aksrt'), human_time_diff($ts))) . '</div>' : ''
);
echo '</tr>';
echo '<td class="column-actions"><div class="aksrt-msg-row-actions">';
printf('<button type="button" class="button-link" data-aksrt-msg-view="%d" aria-haspopup="dialog" aria-controls="aksrt-msg-detail">%s</button>', $id, esc_html__('查看', 'aksrt'));
if ($unread) {
printf('<button type="button" class="button-link" data-aksrt-msg-action="mark_read" data-id="%d">%s</button>', $id, esc_html__('标记已读', 'aksrt'));
}
printf('<button type="button" class="button-link button-link-delete" data-aksrt-msg-action="delete" data-id="%d">%s</button>', $id, esc_html__('删除', 'aksrt'));
echo '</div></td></tr>';
}
private function render_message_detail_template(array $row): void {