内容营销

WordPress:如何添加可排序列以在自定义帖子类型管理页面上显示自定义字段

一区 Martech Zone 继续为我的网站带来大量流量的是我不断增长的文档 销售、营销和技术首字母缩略词. 我继续扩展近 600 个列表,我还用首字母缩写词标记帖子,以便最新的帖子显示在单个首字母缩写词显示页面中。

我创建的这个自定义帖子类型具有三个关键元素:

  • 标题 – 首字母缩略词本身。
  • 定义 – 首字母缩略词代表什么。
  • 内容 – 首字母缩略词的实际描述。

使用 WordPress,标题和内容是任何帖子类型的包含元素,因此必须通过自定义字段添加定义,该自定义字段通过 meta框. 但是,有一个突出的问题,那就是在管理页面上显示定义,其中列出了我所有的首字母缩略词。 

在你的 functions.php 文件中,你可以添加一个 自定义字段 到您的管理栏。 在这种情况下,我只是为了首字母缩略词而做 自定义后类型. 您需要为主题更新代码中的文本域或 子主题.

// Add a new 'Definition' column to the Acronym post list
add_filter('manage_acronym_posts_columns', 'add_definition_column_to_acronym_list');
function add_definition_column_to_acronym_list($columns) {
    $new = array();
    foreach($columns as $key => $title) {
        if ($key == 'title') // Put the Definition column after the Title column
            $new['acronym_definition'] = __( 'Definition', 'textdomain' );
        $new[$key] = $title;
    }
    return $new;
}

// Fill the new 'Definition' column with the values from 'acronym_definition' custom field
add_action('manage_acronym_posts_custom_column', 'add_definition_column_content_to_acronym_list', 10, 2);
function add_definition_column_content_to_acronym_list($column, $post_id) {
    if ($column == 'acronym_definition') {
        $definition = get_post_meta($post_id, 'acronym_definition', true);
        if (!empty($definition)) {
            echo $definition;
        } else {
            echo __('No definition', 'textdomain');
        }
    }
}

这会将列添加为管理页面上的第一列。 我实际上希望它是第二列,所以我修改了代码以在标题列之后添加该列。

// Add a new 'Definition' column to the Acronym post list
add_filter('manage_acronym_posts_columns', 'add_definition_column_to_acronym_list');
function add_definition_column_to_acronym_list($columns) {
    $new_columns = array();

    foreach($columns as $key => $value) {
        $new_columns[$key] = $value;

        if ($key === 'title') {
            $new_columns['acronym_definition'] = __('Definition', 'textdomain');
        }
    }

    return $new_columns;
}

// Fill the new 'Definition' column with the values from 'acronym_definition' custom field
add_action('manage_acronym_posts_custom_column', 'add_definition_column_content_to_acronym_list', 10, 2);
function add_definition_column_content_to_acronym_list($column, $post_id) {
    if ($column === 'acronym_definition') {
        $definition = get_post_meta($post_id, 'acronym_definition', true);
        echo $definition ? $definition : __('No definition', 'textdomain');
    }
}

现在我可以轻松浏览我的首字母缩略词并查看它们的定义:

在 WordPress 管理员中显示自定义帖子类型的自定义字段

这添加了该列,但没有使其可排序。 为了使其可排序,代码可以包含可排序元素以及预取列表所需的查询:

// Add a new 'Definition' column to the Acronym post list
add_filter('manage_acronym_posts_columns', 'add_definition_column_to_acronym_list');
function add_definition_column_to_acronym_list($columns) {
    $new_columns = array();

    foreach($columns as $key => $value) {
        $new_columns[$key] = $value;

        if ($key === 'title') {
            $new_columns['acronym_definition'] = __('Definition', 'textdomain');
        }
    }

    return $new_columns;
}

// Fill the new 'Definition' column with the values from 'acronym_definition' custom field
add_action('manage_acronym_posts_custom_column', 'add_definition_column_content_to_acronym_list', 10, 2);
function add_definition_column_content_to_acronym_list($column, $post_id) {
    if ($column === 'acronym_definition') {
        $definition = get_post_meta($post_id, 'acronym_definition', true);
        echo $definition ? $definition : __('No definition', 'textdomain');
    }
}

// Make the 'Definition' column sortable
add_filter('manage_edit-acronym_sortable_columns', 'make_definition_column_sortable');
function make_definition_column_sortable($columns) {
    $columns['acronym_definition'] = 'acronym_definition';
    return $columns;
}

// Customize the query that sorts the 'Definition' column
add_action('pre_get_posts', 'sort_definition_column');
function sort_definition_column($query) {
    if (!is_admin() || !$query->is_main_query()) {
        return;
    }

    if ($query->get('orderby') == 'acronym_definition') {
        $query->set('meta_key', 'acronym_definition');
        $query->set('orderby', 'meta_value');
    }
}

Douglas Karr

Douglas Karr 是...的创始人 Martech Zone 以及公认的数字化转型专家。 Douglas 帮助创办了几家成功的 MarTech 初创公司,协助对超过 5 亿美元的 MarTech 收购和投资进行尽职调查,并继续推出他自己的平台和服务。 他是 Highbridge,一家数字化转型咨询公司。 道格拉斯还是一本傻瓜指南和商业领导力书籍的出版作者。

相关文章

你觉得呢?

本网站使用Akismet来减少垃圾邮件。 了解您的数据如何处理.

关闭

检测到Adblock

Martech Zone 我们能够免费为您提供这些内容,因为我们通过广告收入、联属链接和赞助从我们的网站中获利。 如果您在浏览我们的网站时删除广告拦截器,我们将不胜感激。