web-dev-qa-db-fra.com

Saisir la première image attachée à un message et l'utiliser avec les colonnes admin

J'utilise actuellement le tutoriel de @ kovshenin ici pour ajouter une vignette (une image sélectionnée) à mes colonnes admin de type publication.

Serait-il possible (et comment :)) de récupérer d'abord la première image jointe à un message, si aucune image sélectionnée n'est disponible? (et peut-être retourner une image hébergée locale si aucune image sélectionnée n'est également disponible)

C'est le code que j'ai actuellement:

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;
  }
}

Modifier:

Comme mentionné dans les prochains commentaires, il a fallu un certain temps pour comprendre :). À la fin, et avec les suggestions de @ifdion, je suis arrivé au résultat suivant:

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__ ) . '">';
  }
}

Une autre édition

Pas tout à fait sûr que cela saisisse la dernière image attachée à un message, mais de toute façon, ce code l'obtiendra:

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

Oui c'est possible. Je crois que c'est mieux si vous le mettez dans une déclaration conditionnelle

  1. Vérifiez l'image en vedette easy ;
  2. Recherchez un fichier joint avec un type d'image Mime en utilisant ceci et this ;
  3. Recherchez toute balise <img> dans le contenu de la publication ( detail );
  4. S'il n'y a pas d'image du tout, utilisez une image par défaut.

J'espère que cette aide

0
ifdion