自定义 WordPress 管理表:高级修改

已发表: 2021-01-26

在我们关于自定义 WordPress 管理表系列的第一篇文章中,我们研究了如何将一些基本配置应用于我们的帖子类型管理屏幕,包括添加自定义列并使其可排序。

今天我们将更进一步,看看可以应用于 Post list admin 表的一些额外修改。 我们走吧!

增强 WordPress 管理员帖子表

在管理表屏幕中为后端用户提供额外信息肯定会增强他们的工作流程体验。 在本教程中,我们的目标是通过添加信息、修改现有内容、重新排序列甚至删除不必要的表列来改进 Post Admin Table 中显示的数据。

显示特色图片

将特色缩略图添加到管理表的帖子列表中会非常有用。 这将真正加快查看帖子是否有错误图像(或者可能根本没有图像)的能力,而无需打开每个单独的帖子。

为了实现这一点,我们将为我们的编辑帖子页面创建一个特色图像列,并用图像缩略图填充它。 如上一篇文章所示,我们将使用manage_posts_columns 。 如果您尚未阅读本文,请阅读本文,因为它包含本教程所需的一些代码。

如果您已经阅读了这篇文章并一直关注它,那么您应该在活动主题的functions.php文件中包含以下代码。 如果没有,请添加它!

 add_filter('manage_posts_columns','add_custom_columns'); function add_custom_columns( $columns ) { $columns['last_modified'] = 'Last modified'; return $columns; } add_action( 'manage_posts_custom_column','custom_columns_content', 10, 2 ); function custom_columns_content ( $column_id, $post_id ) { switch( $column_id ) { case 'last_modified': echo get_post_field('post_modified', $post_id); break; } }

要在我们的管理表中显示特色图像,我们需要按如下方式编辑此代码:

 add_filter('manage_posts_columns','add_custom_columns'); function add_custom_columns( $columns ) { $columns['last_modified'] = 'Last modified'; $columns['my_post_thumbs'] = 'Thumbs'; return $columns; } add_action( 'manage_posts_custom_column','custom_columns_content', 10, 2 ); function custom_columns_content ( $column_id, $post_id ) { switch( $column_id ) { case 'last_modified': echo get_post_field('post_modified', $post_id); break; case 'my_post_thumbs': echo the_post_thumbnail( 'thumbnail' ); break; } }

第三个和第四个参数中的数字 10 和 2 指示处理与此操作关联的函数的优先级。 这些参数将传递给我们的custom_columns_content函数。

优先级的默认值为 10。数字 2 显示函数参数的数量。 所以在我们的例子中,包含这些数字很重要,因为我们有 2 个参数,即$column_id$post_id

现在,保存此代码后,让我们看看我们的管理员帖子屏幕中有什么。

WordPress 管理表特色图片

如您所见,我们现在有一个“Last Modified”列和新的“Thumbs”列。

更改列标签

假设我们出于某种原因想要更改列的标签,例如,将“作者”列重命名为“作家”。 为此,我们可以像添加自定义列一样简单地定义新标签。 再一次,为了让我们的代码更加独特,我们将使用不同的函数分隔重命名代码片段。

 add_filter('manage_posts_columns','rename_columns'); function rename_columns( $columns ) { $columns['author'] = 'Writer'; return $columns; }

当然,您可以通过添加$columns['COLUMN_ID'] = 'NEW_LABEL';来更改同一代码段中多个列的标签。 就在return $columns;之前

增强 WordPress 管理页面表

您可能没有意识到这一点,但 WordPress 页面是一种分层帖子类型,这意味着每个页面都可能有一个父页面。

一眼就能看出哪个页面是任何子页面的父页面可能会很有帮助。 让我们来看看如何做到这一点。

添加显示父帖子的自定义列

首先,创建了一些带有一些相关特色图像的父子页面。

WordPress 管理表父子帖子

接下来,我们将一些代码放入我们的functions.php文件中。 我们将遵循与 Posts 类型相同的过程来添加我们将称为“祖先”列的内容。

 add_filter('manage_pages_columns','add_ancestor_column'); function add_ancestor_column( $columns ) { $columns['ancestor'] = 'Ancestor'; return $columns; }

将列放置在表中的所需位置也是如此。 我们将重新排序表的列,以便“祖先”列位于作者列之前。

 add_filter('manage_pages_columns', 'change_ancestor_column_position'); function change_ancestor_column_position($columns) { $n_columns = array(); foreach($columns as $key => $value) { if ($key=='author'){ $n_columns['ancestor'] = 'ancestor'; } $n_columns[$key] = $value; } return $n_columns; }

此时,在您的 Pages 管理屏幕中,您应该会看到如下内容:

我们要做的最后一件事是用正确的内容填充“祖先”列。 因为这次我们使用的是分层帖子类型,所以我们将使用不同的挂钩来获取列内容。 尝试插入这段代码并检查结果。

 add_action( 'manage_pages_custom_column','ancestor_column_content', 10, 2 ); function ancestor_column_content ( $column_id, $post_id ) { switch( $column_id ) { case 'ancestor': $ancestors = get_ancestors($post_id, 'subject', 'post_type'); $post_ancestor = end($ancestors); if ($post_ancestor != 0) { echo '<a href="' . get_edit_post_link($post_ancestor) . '">' . get_the_title($post_ancestor) . '</a>'; } else { echo '-'; } break; } }

您现在应该会在“祖先”列中看到相关的父页面及其子页面。

如果您的页面在管理表中的顺序被打乱(例如,因为它们按发布日期排序等)并且因此子页面不再整齐地出现在它们各自的父页面下,这将特别有用。

更改默认列

可以做几件事来改进默认的 Admin 表列。 让我们来看看其中的一些。

重新排序列

在我们之前关于自定义管理表的文章中,我们添加了一个新列,用于显示上次修改帖子的日期。 但是如果我们想改变它在列顺序中的位置呢?

幸运的是,这非常简单,可以通过使用manage_posts_columns挂钩来实现。

必须定义的是需要移动的列以及我们要放置列的位置之前的列。 因此,例如,如果我们希望将特征图像作为第一个表格列,则必须将其移动到标题列之前。 对应的片断代码应该是这样的:

 add_filter('manage_posts_columns', 'change_column_order'); function change_column_order($columns) { $n_columns = array(); $move = 'author'; // what to move $before = 'title'; // move before this foreach($columns as $key => $value) { if ($key==$before){ $n_columns[$move] = $move; } $n_columns[$key] = $value; } return $n_columns; }

瞧!

将特色图像添加到您的 WordPress 管理表

删除列

有时,帖子列表表的某些列实际上并不是特别有用,如果将它们删除以释放一些空间会更好。 一个常见的候选者是评论栏。

幸运的是,从我们的表中删除一列非常容易。 我们只需要添加unset($columns['comments']);manage_posts_columns钩子的函数中。 虽然这可以添加到我们现有的代码中,但如果我们可以将其分离到自己的代码片段中会更整洁,因为它有不同的目的并为钩子引入了一个新函数。

 add_filter('manage_posts_columns' , 'remove_columns'); function remove_columns($columns) { unset($columns['comments']); return $columns; }

就是这样。 刷新您的 Admin 屏幕,您应该会看到 Comments 列已消失。

注意:如果您不确定列的 ID 是什么,您可以使用浏览器的检查器控制台检测到这一点。

管理栏插件

如果您不想对您的 WordPress 管理表进行编码更改,那么不要害怕……因为这是 WordPress,所以有一个插件可以让您进行大量更新,而无需触及一行代码。 它被称为管理列。

注意:在继续安装/激活插件之前,最好还原帖子列表表上的所有自定义项(如果您进行了任何自定义)并开始使用该插件和初始状态的管理员帖子表。

下载并安装插件后,转到“设置”>“管理列”菜单项。 从这里您可以从下拉列表中选择帖子列表表(或您希望能够编辑其管理表的任何其他帖子类型)。 然后您将看到当前的表结构。

现在,使用拖放界面,您可以轻松地重新排序列。 您还可以使用箭头图标来编辑类型标签和宽度以查看其配置。

而且,是的,您甚至可以使用右下角的“添加列”按钮添加自己的列!

插件在这里实际做的是从数据库表中收集与帖子类型相关的所有可用选项,并提供这些类型下拉菜单。 因此,例如,如果您想像以前一样添加“上次修改时间”列,只需在“类型”列表中找到并选择它,然后为其指定标签和所需宽度。

之后,您可以根据需要更改将出现的日期格式选项。

结论

在您的 WordPress 管理表上拥有正确的信息可以真正加快您的工作流程并帮助防止网站上的错误。 例如,当您可以在帖子管理表中一目了然地查看所有帖子及其相关的特色图片时,您不太可能故意在没有特色图片的情况下发布帖子。 试一试,设置适合您和您的工作流程的管理表。