当前位置: 首页 > 知识库问答 >
问题:

使用ACF Pro在Wordpress admin for post列表中选择字段可排序自定义列

单于智
2023-03-14

在Wordpress admin中为文章列表创建新栏的代码:

//adds new column to posts list in Wordpress admin
add_filter( 'manage_posts_columns', 'set_custom_edit_mycpt_columns' );

function set_custom_edit_mycpt_columns( $columns ) {
  $columns['acf_field'] = __( 'Editorial status', 'my-text-domain' );

  return $columns;
}

// pulls label from ACF Pro select field into new column for each post
add_action( 'manage_posts_custom_column' , 'custom_mycpt_column', 10, 2 );
function custom_mycpt_column( $column, $post_id ) {
  switch ( $column ) {

    // display the value of an ACF (Advanced Custom Fields) field
    case 'acf_field' :
      $ed_status = get_field_object( 'ed_status_acf', $post_id ); 
      $ed_status_pretty = $ed_status['label'];
      echo $ed_status_pretty;
      break;

  }
}

问题:我成功地从我在高级自定义字段专业版中创建的选择字段中从每篇文章中提取标签,并看到这些标签填充在“编辑状态”列中。(请参阅上面代码的工作部分。)我无法弄清楚的是如何使该列可排序,尽管尝试了不同的教程。

代码的非工作部分显示在下面。此代码不会破坏站点-该列只是无法排序。

// make new column sortable by ACF field
add_filter( 'manage_edit-posts_sortable_columns', 'set_custom_mycpt_sortable_columns' );

function set_custom_mycpt_sortable_columns( $columns ) {
  $columns['custom_taxonomy'] = 'custom_taxonomy';
  $columns['acf_field'] = 'acf_field';

  return $columns;
}

// give parameters to Wordpress for sorting the new column
add_action( 'pre_get_posts', 'mycpt_custom_orderby' );

function mycpt_custom_orderby( $query ) {
  if ( is_admin() ) {
    return;

  $orderby = $query->get( 'orderby');

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

目标:找出我做错了什么,并使Wordpress管理员的帖子列表页面上出现的“编辑状态”列可排序。我希望能够按编辑状态按字母顺序排序(例如,草稿、待定、正在审核等)

上面的所有代码目前都在我创建的自定义插件中。我见过在不使用ACF Pro选择字段时工作的解决方案,所以我觉得它与pre_get_posts有关,并使用来自选择的元数据与get_field_object有关,但我不确定。

感谢任何反馈,因为我不知道我哪里出错了!我知道有插件可以为Wordpress创建自定义可排序列。但是,为了学习,我想知道我在这里做错了什么。谢谢!

共有2个答案

窦伟
2023-03-14

这对你的代码没有帮助,但如果你已经厌倦了这项工作,你可能会求助于管理员专栏专业版。

让我们轻松地为帖子或页面列表(或任何CPT /分类)创建列,您可以将这些列设置为可内联编辑,可排序,可过滤等。

本来会把这个作为评论,但还不够。不好意思。

温凯
2023-03-14

看来我们在完成这类任务时遇到了相同的指南。

这就是最终对我有用的东西。

在我的例子中,我想在管理仪表板中添加一个ACF字段作为列,然后使该列可排序。

“目录”是帖子类型。“电子邮件”是ACF名称

添加列

add_filter('manage_directory_posts_columns', 'filter_directory_custom_columns');

function filter_directory_custom_columns($columns) {
    $columns['email'] = 'Email';
    return $columns;
}

用帖子数据填充行

add_action('manage_directory_posts_custom_column',  'action_directory_custom_columns');

function action_directory_custom_columns($column) {
    global $post;
    if($column == 'email') {
        $directoryfields = get_fields($post->ID);
        echo $directoryfields['email'];
    }
}

使列可排序

add_filter( 'manage_edit-directory_sortable_columns', 'sortable_directory_custom_columns' );

function sortable_directory_custom_columns( $columns ) {
    $columns['email'] = 'email';
    return $columns;
}

这是我错过的部分。

add_action( 'pre_get_posts', 'directory_orderby' );
function directory_orderby( $query ) {
    if( ! is_admin() )
        return;
    $orderby = $query->get( 'orderby');
    if( 'email' == $orderby ) {
        $query->set('meta_key','email');
        $query->set('orderby','meta_value');
    }
}

向UtahWP(爵士乐,短裤)社区大喊,感谢他们帮助我度过难关

 类似资料:
  • 问题内容: 我想使用自定义功能对a进行序列化和反序列化,但是Serde的书没有涵盖此功能,并且代码文档也无济于事。 我知道Serde可以很容易地反序列化,因为Chrono支持Serde, 但是 我想学习Serde,所以我想自己实现。当我运行此代码时,出现错误: 问题答案: 结构反序列化的默认行为是,当字段不以序列化形式出现时,为其分配各自的默认值。请注意,这与container 属性 不同,con

  • 我已经成功地实现了一个google可视化表,并通过添加events listener为一列添加了自定义排序过程。 背景:数据来自数据库以呈现表。我有几个表列带有“Status”列。此列应根据不显示该表的另一个数据字段进行排序。(所有数据都来自数据库,只需一次查询。它们都运行良好。)在addListener中,我根据自己的需求对从数据库中获取的数组进行排序,并通过

  • 问题内容: 目前,我正在尝试向我们在Salesforce内部使用的自定义选择列表中添加值。目前,经过数天的尝试,我无法创建新的自定义选择列表,如下所示: 现在,我尝试使用xml更新现有选择列表中的值。但是,当我尝试用更新标记替换create标记时,它告诉我在该位置无效的标记如“ fullName”,“ label”等。 任何帮助将非常感激! 问题答案: 经过数天的尝试,我终于找到了一种更新Sale

  • 问题内容: 我有一个清单 我想按1. 2. 3.的顺序对其进行排序。 结果: 我在stackoverflow中看到了其他类似的问题,但是没有类似的问题或对我容易适用。 问题答案: 我们在这里所做的全部工作是通过为列表中的每个元素而不是整个列表返回一个整数来提供一个新的元素进行排序。我们 可以 使用内联三元表达式,但这会有点麻烦。

  • 问题内容: 我看过一些定义选择字段的示例,如下所示: (来源:http : //code.djangoproject.com/ticket/5446 另请参见:http : //djangosnippets.org/snippets/494/) 下划线的含义是什么?为什么在元组中的第二个值甚至加上括号? 问题答案: 前划线是国际化(i18n)机制使用的ugettext函数之一的常用函数别名。 这意

  • 问题内容: 阅读完之后:http : //pandas.pydata.org/pandas- docs/version/0.13.1/genic/pandas.DataFrame.sort.html 我似乎仍然无法弄清楚如何通过自定义列表对列进行排序。显然,默认排序是字母顺序的。我举一个例子。这是我的(非常删节的)数据帧: 我希望能够按播放器,年份和Tm进行排序。按玩家和年份的默认排序对我来说是正