1

投稿リストの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 管理画面の投稿リスト ページに表示される [編集ステータス] 列を並べ替え可能にします。編集ステータス (下書き、保留中、レビュー中など) でアルファベット順にソートできるようにしたいと考えています。

上記のすべてのコードは、現在、私が作成したカスタム プラグインに含まれています。pre_get_postsACF Pro 選択フィールドが使用されていない場合に機能するソリューションを見てきました。そのため、select からのメタを使用することに関係しているように感じますがget_field_object、よくわかりません。

どこが間違っているのかわからないので、フィードバックをいただければ幸いです。Wordpress 用のカスタムの並べ替え可能な列を作成するプラグインがあることは知っています。ただし、学ぶために、ここで何が間違っているのかを知りたいです。ありがとう!

4

2 に答える 2

1

この種のタスクを達成しようとしているときに、同じガイドに出くわしたようです。

これが私のために働いたものです。

私の場合、管理ダッシュボードに ACF フィールドを列として追加し、その列をソート可能にしたいと考えました。

「ディレクトリ」は投稿タイプです。「email」は 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');
    }
}

ユタWP(jazzsequence、ninnypants)コミュニティへの叫び声で、これを解決するのを手伝ってくれました

于 2022-01-07T23:04:56.387 に答える