web-dev-qa-db-ja.com

投稿に添付されている最初の画像を取得して、管理者用列と一緒に使用する

私は現在@ kovsheninのチュートリアル をここ で私の投稿タイプのadminカラムにサムネイル(注目の画像)を追加するのに使っています。

おすすめの画像がない場合、最初に投稿に添付された最初の画像を取得することが(そしてどうやって:))可能でしょうか? (注目の画像がない場合は、おそらくローカルホストの画像を返す)

これは私が現在持っているコードです:

add_action( 'after_setup_theme', 'cor_after_setup_theme' );
function cor_after_setup_theme() {
  add_image_size( 'edit-screen-thumbnail', 48, 48, true );
}

add_filter( 'manage_edit-product_columns', 'cor_add_product_column', 10, 1 );
function cor_add_product_column( $column ) {
  $column_thumbnail = array(
    'thumbnail' => ''
  );
  $column = array_slice( $column, 0, 1, true ) + $column_thumbnail + array_slice( $column, 1, NULL, true );
  return $column;
}

add_action( 'manage_posts_custom_column', 'cor_manage_product_column', 10, 1 );
function cor_manage_product_column( $column ) {
  global $post;
  switch ( $column ) {
    case 'thumbnail':
      echo get_the_post_thumbnail( $post->ID, 'edit-screen-thumbnail' );
      break;
  }
}

編集:

次のコメントで述べるように、物事を把握するのにはしばらく時間がかかりました:)。最後に、そして@ ifdionの提案で、私は次の結果を思いつきました:

add_action( 'after_setup_theme', 'cor_after_setup_theme' );
function cor_after_setup_theme() {
  add_image_size( 'edit-screen-thumbnail', 48, 48, true );
}

add_filter( 'manage_edit-product_columns', 'cor_add_product_column', 10, 1 );
function cor_add_product_column( $column ) {
  $column_thumbnail = array(
    'thumbnail' => ''
  );
  $column = array_slice( $column, 0, 1, true ) + $column_thumbnail + array_slice( $column, 1, NULL, true );
  return $column;
}

add_action( 'manage_posts_custom_column', 'cor_manage_product_column', 10, 1 );
function cor_manage_product_column( $column ) {
  global $post;

  $args = array(
    'numberposts' => 1,
    'post_mime_type' => 'image',
    'post_parent' => $post->ID,
    'post_type' => 'attachment',
  );
  $attachments = get_children( $args );

  if ( has_post_thumbnail() ) {
    echo get_the_post_thumbnail( $post->ID, 'edit-screen-thumbnail' );

  } elseif ( $attachments ) {
    foreach ( $attachments as $attachment ) {
      $image_attributes = wp_get_attachment_image_src( $attachment->ID, 'edit-screen-thumbnail' );
      echo '<img src="' . $image_attributes[0] . '">';
    }

  } else {
    echo '<img src="' . plugins_url( '/img/edit-screen-thumbnail.png', __FILE__ ) . '">';
  }
}

もう一つの編集

これが投稿に添付された最後の画像を取得するかどうかは完全にはわかりませんが、とにかく、このコードはそれを取得します:

add_action( 'after_setup_theme', 'cor_after_setup_theme' );
function cor_after_setup_theme() {
  add_image_size( 'edit-screen-thumbnail', 48, 48, true );
}

add_filter( 'manage_edit-product_columns', 'cor_add_product_column', 10, 1 );
function cor_add_product_column( $column ) {
  $column_thumbnail = array(
    'thumbnail' => ''
  );
  $column = array_slice( $column, 0, 1, true ) + $column_thumbnail + array_slice( $column, 1, NULL, true );
  return $column;
}

add_action( 'manage_posts_custom_column', 'cor_manage_product_column', 10, 1 );
function cor_manage_product_column( $column ) {
  global $post;

  $args = array(
    'numberposts' => 1,
    'post_mime_type' => 'image',
    'post_parent' => $post->ID,
    'post_type' => 'attachment',
    'post_status' => null,
  );
  $attachments = get_posts( $args );

  if ( has_post_thumbnail() ) {
    echo get_the_post_thumbnail( $post->ID, 'edit-screen-thumbnail' );

  } elseif ( $attachments ) {
    foreach ( $attachments as $attachment ) {
      echo wp_get_attachment_image( $attachment->ID, 'edit-screen-thumbnail' );
    }

  } else {
    echo '<img src="' . plugins_url( '/img/edit-screen-thumbnail.png', __FILE__ ) . '">';
  }
}
1
user5424

はい、可能です。私はあなたがそれを条件付きのステートメントに入れた方が良いと思います

  1. 注目の画像をチェック 簡単 ;
  2. this および this を使用して、画像MIMEタイプの添付ファイルを確認します。
  3. 投稿コンテンツに<img>タグがないか確認します( detail )。
  4. 画像がまったくない場合は、デフォルトの画像を使用します

この助けを願っています

0
ifdion