it-swarm.com.de

ändere set_post_thumbnail_size entsprechend der Admin-Seite des Beitragstyps

Ich habe ein paar benutzerdefinierte Thumbnail-Größen und offensichtlich wird eine davon in set_post_thumbnail_size verwendet, was sich direkt auf die Benutzeroberfläche im Admin-Bereich auswirkt.

Ich möchte nur abfangen, auf welcher Admin-Seite (für Post-Type) ich mich befinde, und in der obigen Funktion eine andere Größe festlegen. Im Grunde möchte ich Folgendes haben:

function setup_the_theme() {

    add_theme_support( 'post-thumbnails' );

        if ($post_type == 'type_A'){
            set_post_thumbnail_size( 298, 167, true ); //portrait
        } else {
            set_post_thumbnail_size( 192, 108, true ); //landscape
        }

    add_image_size( 'top_articles', 298, 167, true ); //portrait
    add_image_size( 'article_thumb', 203, 114, true ); //portrait
    add_image_size( 'featured_articles', 60, 200, true ); //landscape

}
add_action( 'after_setup_theme', 'setup_the_theme' );

Ich vermute, es ist zu früh im Zyklus, um zu wissen, welchen Beitragstyp ich bearbeite.

6
Amit

Einfachere Methode zum Ermitteln des Post-Typs des Elements (das Sie bearbeiten) und zum Hochladen von Medien auf:

$type = get_post_type($_REQUEST['post_id']);

Wie bereits erwähnt, gibt der Medien-Upload-Iframe, der in der Lightbox-Überlagerung angezeigt wird, wenn Sie versuchen, etwas hochzuladen, nicht den übergeordneten Beitrag an, an den der neue Upload angehängt wird. Der $_REQUEST ist jedoch im Bearbeitungsfenster weiterhin aktiv und enthält weiterhin die post_id des Elements, das Sie bearbeiten. Fragen Sie einfach den Typ für diese ID ab.

Sie können diese Technik in verschiedenen Hooks und Filtern verwenden - ich habe den intermediate_image_sizes-Filter bereits für die Bildverarbeitung verwendet, aber nicht für dieses spezielle Problem, aber es sollte auch dort funktionieren ...

10
somatic

Es gibt einen intermediate_image_sizes Filter in der Funktion wp_generate_attachment_metadata . Das Problem ist, dass der Beitragstyp nicht als Teil des Kontexts übergeben wurde. Hier ist eine Möglichkeit, um dieses Problem zu umgehen, indem Sie einen Transienten mit dem Wert des Post-Typs im Medien-Upload-Popup festlegen:

add_action( 'admin_head-media-upload-popup', 'define_post_type' );

function define_post_type() {
    $referring_string = explode('?',$_SERVER['HTTP_REFERER']);
    if ($referring_string[1]) parse_str( $referring_string[1] );
    else $post_type = 'post';
    set_transient('current_upload_parent_type',$post_type);
}

add_filter( 'intermediate_image_sizes_advanced', 
     'set_thumbnail_size_by_post_type', 10);

function set_thumbnail_size_by_post_type( $sizes ) {

    $post_type = get_transient( 'current_upload_parent_type' );
    delete_transient( 'current_upload_parent_type' );

    switch ($post_type) :
        case 'type_A' :
            $sizes['post-thumbnail'] = array( 
                         'width' => 298, 'height' => 167, 'crop' => true);
            break;
        default :
            $sizes['post-thumbnail'] = array( 
                         'width' => 192, 'height' => 108, 'crop' => true);
            break;
    endswitch;

    return $sizes;

}

Ich denke, dass dies der Trick sein sollte, obwohl es wahrscheinlich eine elegantere Art gibt, dies zu tun, als einen Übergang zu setzen (und so ist es nicht kugelsicher - zwei gleichzeitige Bild-Uploads laufen Gefahr, ihre Post-Typen zu kreuzen und Bilder hochzuladen Über das Bedienfeld "Neue Medien" kann der Beitragstyp vom zuletzt auf dem Beitragsbildschirm hochgeladenen Bild übernommen werden.

Vielleicht kann jemand dies verbessern?

Bearbeiten:

Ich wusste, dass es dafür einen besseren Weg geben musste. Ignoriere die Funktion, die mit admin_head-media-upload-popup verknüpft ist, und folge der Antwort von @somatic, um den Post-Typ zu überprüfen. Sie können die Größe der Post-Thumbnails weiterhin basierend auf dem Post-Typ in intermediate_image_sizes_advanced festlegen.

7
goldenapples

Ich habe die Ideen von Somatic und Goldenapples (vielen Dank!) Folgendermaßen gemischt. Es funktioniert wie ein Zauber und ist wirklich einfach zu implementieren.

Es sollte in functions.php geschrieben sein

/* Adding image sizes*/
add_filter( 'intermediate_image_sizes_advanced','set_thumbnail_size_by_post_type', 10);
function set_thumbnail_size_by_post_type( $sizes ) {

    $post_type = get_post_type($_REQUEST['post_id']);

    switch ($post_type) :
        case 'service' :
            $sizes['service'] = array( 
                'width' => 250,
                'height' => 155,
                'crop' => true
            );    
        break;
        case 'post' :
            $sizes['post'] = array( 
                'width' => 250,
                'height' => 210,
                'crop' => true
            );
        break;
        default :
            $sizes['default'] = array( 
                'width' => 200,
                'height' => 200,
                'crop' => true
            );
    endswitch;

    return $sizes;
}
4
TheTrueTDF

Nur für den Fall, dass Sie nicht wissen, wie Sie die hervorragende Idee von @ somatic umsetzen können, lesen Sie hier, wie Sie dies tun können.

Der Code würde in die functions.php deines Themas gehen:

if ( ! function_exists( 'wpse6103_setup' ) )
{
  function wpse6103_setup() {

    // Other theme defaults and register functions

    add_theme_support( 'post-thumbnails' );

      /*
       * Based on: http://wordpress.stackexchange.com/a/6123
       */
      if( ! empty( $_REQUEST[ 'post_id' ] ) && ctype_digit( $_REQUEST[ 'post_id' ] ) ) {

        /*
         * Check if post type is 'book'. If yes, set the thumbnail size to
         * 300 x 150. If not, obey the sizes defined for thumbnail in
         * WordPress Dashboard > Media > Image sizes > Thumbnail size.
         */
        if( get_post_type( 'book' == $_REQUEST[ 'post_id' ] ) ) {
          set_post_thumbnail_size( 300, 150, false );
        }

      }

  }
}
add_action( 'after_setup_theme', 'wpse6103_setup' );

Um dann ein ausgewähltes Bild in Ihrer Vorlage anzuzeigen, können Sie folgendermaßen vorgehen:

<?php

  if ( has_post_thumbnail() ) {

    if( 'aahank_book' == get_post_type() ) {

      echo wp_get_attachment_image( get_post_thumbnail_id( $post->ID ), array( 300, 150 ), false, array( 'class' => 'img-thumbnail' ) );

    } else {

      the_post_thumbnail( 'thumbnail', array( 'class' => 'img-thumbnail' ) );

    }

  }

?>

Wie ich sehe, können Sie nicht mit der üblichen the_post_thumbnail() -Funktion fortfahren, da immer die in WordPress Dashboard> Media> Image sizes festgelegte Bildgröße angezeigt wird. > Thumbnail-Größe und nicht die bedingte Bildgröße, die wir zuvor für den benutzerdefinierten Beitragstyp festgelegt haben.

0
its_me

Ich wiederhole eine frühere Antwort auf eine ähnliche Frage :

Es gibt keine Möglichkeit, die Bildgrößen auf den Beitragstyp abzustimmen, da Bilder noch nicht an einen Beitrag angehängt sind, wenn Sie sie hochladen, und die Zwischenbildgrößen erstellt werden (wenn Sie sie einfach über "Neue Medien" hinzufügen, werden sie nicht einmal angehängt zu irgendeinem Beitrag überhaupt).

Diese Antwort enthält jedoch Informationen über Plugins, die ich geschrieben habe die zusammen wahrscheinlich alles können, was Sie wollen: Verwenden Sie mehrere Bildgrößen, aber erstellen Sie nur die Bilder, die Sie tatsächlich verwenden.

0
Jan Fabry