【WordPress】カスタムフィールドに登録されている画像を管理画面の投稿一覧で表示したい

WordPress

WordPressで記事に登録されているカスタムフィールドの画像を、管理画面の投稿一覧に表示する例を紹介します。

前回(【WordPress】【jQuery】レスポンシブ対応のスライダー・slickを投稿で使いたい)に引き続き、画像を登録するカスタムフィールドにはSmart Custom Fieldsを使います(変数なども前回の記事のものを使いまわしています)。

投稿やカスタム投稿の管理画面上の一覧には、記事のタイトルや公開日時が掲載されています。今回はそこにカラムを一列追加し、カスタムフィールドに登録されいてる画像をサムネイルとして出力します。

フィルターフックには、manage_posts_columns(カスタム投稿の場合はmanage_{$post_type}_posts_columns)とmanage_posts_custom_column(カスタム投稿の場合はmanage_{$post_type}_posts_custom)を使います。

サムネイル(画像)用のカラム(列)を追加

まずは管理画面の投稿一覧に、サムネイルを表示するためのカラム(列)を追加する処理をfunctions.phpに記述します。

functions.php

functions.phpの記述例です。今回はカスタム投稿の例です。

ここでmanage_{$post_type}_posts_columnsをフックとした関数を記述します。「product」の部分がカスタム投稿タイプになります。任意の名前に変更してください。

function add_product_column_thumdisp( $columns ) {
  $columns['thumbnail'] = __('Thumbnail');
  return $columns;
}
add_filter('manage_product_posts_columns', 'add_product_column_thumdisp');

カスタムフィールドの値を取得し、追加した列へ出力

カラムが追加できたら、各記事のカスタムフィールドの値を取得し、カラムへ表示させます。複数登録されている場合、最初の1枚だけが表示される仕組みです。

functions.php

こちらではmanage_{$post_type}_posts_customをフックとした関数を記述します。get_post_meta()関数やSCF::get()に使われているフィールド名は前回の記事を流用しています。任意の名前に変更してください。

サムネイル画像の出力には、wp_get_attachment_image()関数を使っています。第一引数にはアタッチメントIDを指定、第二引数の$sizeは表示させたい画像サイズを指定してください。(初期値: ‘thumbnail’)

function add_product_column_thum_id($column_name, $id) {
  if ( 'thumbnail' == $column_name ) {

    /* カスタムフィールドに値があるかチェック */
    $wp_slick_flg = get_post_meta( $id, 'wp_slick_img', true);

    /* カスタムフィールドに値がある場合、サムネイル表示処理を行う */
    if($wp_slick_flg) {

      /* 表示に使うスマートカスタムフィールドの値を取得 */
      $wp_slick_grp = SCF::get( 'wp_slick_grp' );

      /* スマートカスタムフィールドの画像タイプはアタッチメントIDが入っています。今回は最初の一枚を使います。 */
      $wp_slick_img_id = $wp_slick_grp[0]['wp_slick_img'];

      /* アタッチメントIDから代替テキストを取得 */
      $wp_slick_img_alt = get_post_meta( $wp_slick_img_id, '_wp_attachment_image_alt', true );

      /* アタッチメントIDから画像を取得し、代替テキストと一緒に出力用の変数へ代入 */
      $output_thumbnail = wp_get_attachment_image( $wp_slick_img_id, $size = array(90, 90), $icon = false, $attr = array('alt' => $wp_slick_img_alt) );

      echo $output_thumbnail;
    }
  }
}
add_action('manage_product_posts_custom_column', 'add_product_column_thum_id', 10, 2);

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

関連記事