可用于在Wordpress管理员中为帖子列表创建新列的代码:
//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;
}
}
问题: 我成功地从每个帖子中从我在Advanced Custom Fields Pro中创建的选择字段中拉入标签,并看到这些标签填充在“编辑状态”列中。 (请参见上面的代码的工作部分。)尽管尝试了不同的教程,但我无法弄清楚如何使该列可排序。
代码的无效部分显示在下面。这段代码不会破坏站点-该列只是无法排序。
// 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
和使用select与get_field_object
的元有关,但是我不确定。
任何反馈表示赞赏,因为我不知道我要去哪里错了!我知道有一些插件可以为Wordpress创建自定义可排序的列。我想知道我在这里做错了什么,以便学习。谢谢!
答案 0 :(得分:0)
无法为您提供代码帮助,但是如果您感到厌倦了编写代码,可以前往Admin Columns Pro。
让我们轻松地为帖子或页面列表(或任何CPT /分类法)创建列,并将这些列设置为可在线编辑,可排序,可过滤等。
将把它作为评论,但要点不够。抱歉。