簡體   English   中英

在 Wordpress 管理員中使用 ACF Pro 選擇字段的可排序自定義列用於帖子列表

[英]Sortable custom column using ACF Pro select field in Wordpress admin for post list

用於在 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和使用pre_get_posts的選擇get_field_object ,但我不確定。

任何反饋表示贊賞,因為我無法弄清楚我哪里出錯了! 我知道有一些插件可以為 Wordpress 創建自定義可排序列。 但是,為了學習,我想知道我在這里做錯了什么。 謝謝!

無法為您提供代碼方面的幫助,但是,如果您不厭其煩地工作,則可以參閱Admin Columns Pro

讓我們輕松地為帖子或頁面列表(或任何CPT /分類法)創建列,並可以將這些列設置為可在線編輯,可排序,可過濾等。

本可以作為評論,但要點還不夠。 抱歉。

看來我們在嘗試完成此類任務時遇到了相同的指南。

這就是最終為我工作的原因。

就我而言,我想在管理儀表板中添加一個 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(jazzsequence, ninnypants) 社區大喊大叫,感謝他們幫助我解決了這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM