投稿一覧でクイック編集の更新後に値がずれて表示されるケースと対処方法

公開日:2024(令和6)年3月2日/最終更新日:

WordPress Trouble Shooting and Repair | Personal WP Customization Notes (PWCN)

【景品表示法に基づく表記】ページ内のコンテンツには、商品プロモーションが含まれています

「manage_posts_columns」で投稿一覧へ何かを表示する列(カラム)を追加した時、通常はプログラム順に右へ右へと追加されます(ちなみに、固定ページの場合は「manage_pagess_columns」)。

これを任意の場所へ表示させたいと考えた場合、わざわざプログラム順を変えるのも大変だし、他のプラグインが追加した列も考慮すると完全には制御できないので、多くのページで紹介されているforeachで回して位置を指定する方法を取り入れている方は多いと思います。

でもこの方法、私が試した限りではちょっと難点があって、クイック編集を開いて更新すると、値が表示される列がずれるという現象が発生するんです。

下図は、「最終更新日」という列を追加して、foreachを使って「日付」の左に表示させた状態で、クイック編集を行った際の状況です(上の画像がクイック編集前、下がクイック編集更新後です)。

クイック編集で更新する前の一覧
クイック編集で更新した後で列表示がずれてしまった時の一覧

よく見てみると、クイック編集前に表示されていた「最終更新日」列の値(2024年1月2日)が、クイック編集の更新後に戻った一覧では値が取得されず、しかも本来「日付」に表示されるべき値が「最終更新日」列に表示される(右に複数の列がある場合は全部が左に1列ずれる)ようになってしまっています。

一覧をリロードすると直るので、個人で使用するのであれば問題ないのですが、誰かが触るサイトだったり、配布している機能だったりすると、不具合に見えてしまい、あまり良い方法ではないように思います。

そこで、いろいろと試行錯誤&最大限の検索能力を発揮させて(笑)解消した方法を紹介します。

なお、一口に管理画面の一覧に列を追加といってもいろいろな書き方があるので、後述するコード例を参考にされる方は、自身のコードとの相違点などをいろいろと精査した上で活用ください。

コードを使用する前に、ここをクリックして注意事項をご確認ください

本ページで掲載しているコードは、以下に了承した上で使用ください

  • コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
  • コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
  • コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
  • コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
  • 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
  • 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)

クイック編集から戻った一覧の値ズレを起こさないようにする方法

まず...肝心の不具合が発生したforeachで回すコードは、対処中に消してしまったため、ここでは例を掲載できませんのであしからず(多分いろいろなページのコードのほとんどはどこかのコードのコピーっぽいので「WordPress 管理画面 列 位置」などで調べればコードにはたどり着けるでしょう..)。

さて、以下が管理画面の投稿一覧へ列を追加する際の基本コードです(このコードは列の追加のみで、値の指定を行う別のユーザー定義関数+「manage_posts_custom_column」フックを使用するコードは本ページでは関係がないので割愛します)。

function pwcn_add_modified_column( $columns ) {
    $columns['Modified'] = __( 'Last Modified Date' );

    return $columns;
}
add_filter( 'manage_posts_columns', 'pwcn_add_modified_column' );

まあ「Modified」という列名で「Last Modified Date」という文字列で見出し表示という意味ですね(言うまでもないか..)。

今回のケースでは「Modified」という列を日付である「date」列の右へ表示させるために行っていたforeach回しで不具合が出たわけです。

そこで入れ替えて不具合が解消したのが以下のコードです。

function pwcn_add_modified_column( $columns ) {
    $modified_column = array( 'Modified' => __( 'Last Modified Date' ) );

    // カラムの順序を変更するために、dateカラムのインデックスを取得
    $date_column_index = array_search( 'date', array_keys( $columns ) );

    // dateカラムの右側にModifiedカラムを追加
		//1行目 日付カラムの右で一旦分割
		//2行目 更新日カラムを追加
		//3行目 日付カラムの右(更新日)のさらに右には何もない状態に戻す
		$columns = array_slice( $columns, 0, $date_column_index + 1, true )
			+ $modified_column
			+ array_slice( $columns, $date_column_index + 1, null, true );

    return $columns;
}
add_filter( 'manage_posts_columns', 'pwcn_add_modified_column' );

コード内にコメントをいっぱい入れていますが、要は投稿一覧の「日付」列の右側へ「更新日」列を入れ込み、残りの列をその右へ表示させるという手法です。

私の場合には、他のコード(値の出力を行うコードやクイック編集のコードなど)は一切触らずこの方法で解消できましたので、試してみる価値はあるかも知れません。

Lolipop ServerMoshimo Ad x-serverMoshimo Ad

WordPress Trouble Shooting and Repair | Personal WP Customization Notes (PWCN)
画面上部に「PHP Notice: ob_end_flush(): Failed to send buffer of zlib output compression (0) in…」という表示が出る原因と対処