wake-up-neo.net

Stellen Sie das gewünschte Bild automatisch ein

Wie würde ich jeden Beitrag so ändern, dass er das gleiche, hartcodierte Bild hat ?! Sagen Sie diese Zigarre:

https://www.cigarsofcuba.co.uk/acatalog/slide1.jpeg

(Ich möchte das eigentlich nicht tun - aber es ist ein Stolperstein in etwas Komplexerem.)

Ich denke, es sollte so sein:

function set_post_thumbnail( $post, $thumbnail_id ) {
    $thumbnail_id = "https://www.cigarsofcuba.co.uk/acatalog/slide1.jpeg";
    update_post_meta( $post->ID, '_thumbnail_id', $thumbnail_id );

}

add_action( 'save_post', 'set_post_thumbnail' );

... aber keine Zigarre. Was vermisse ich? Vielen Dank!

4
JohnG

Methode 1: Verwenden der Hooks publish_post * und media_sideload_image()

Hier werden wir ein Bild von einer URL hochladen, es an den Beitrag anhängen und es als das vorgestellte Bild festlegen, wenn der Beitrag veröffentlicht wird.

* Tatsächlich verwenden wir den dynamischen Hook {$new_status}_{$post->post_type}, der den Übergang eines Post-Typs post in den Status publish beschreibt. Siehe wp-includes/post.php für Details.

Dieser Beispielcode gilt für die Veröffentlichung des Beitragstyps post. Es ist eine Überprüfung vorhanden, damit wir das vorgestellte Bild nicht automatisch zuweisen, wenn eines manuell festgelegt wurde. Fühlen Sie sich frei, dies wie gewünscht anzupassen.

/**
 * Download image, attach it to the current post, and assign it as featured image
 * upon publishing the post.
 *
 * The dynamic portions of the hook name, `$new_status` and `$post->post_type`,
 * refer to the new post status and post type, respectively.
 *
 * Please note: When this action is hooked using a particular post status (like
 * 'publish', as `publish_{$post->post_type}`), it will fire both when a post is
 * first transitioned to that status from something else, as well as upon
 * subsequent post updates (old and new status are both the same).
 *
 * @param int     $post_id Post ID.
 * @param WP_Post $post    Post object.
 */
add_action( 'publish_post', 'wpse_default_featured_image', 10, 2 );
function wpse_default_featured_image( $post_id, $post ) {
    // Bail if there is already a post thumbnail set.
    $current_post_thumbnail = get_post_thumbnail_id( $post_id );
    if ( '' !== $current_post_thumbnail ) {
        return;
    }

    $url = 'https://www.cigarsofcuba.co.uk/acatalog/slide1.jpeg';
    $title = "The default featured image.";

    $image = media_sideload_image( $url, $post_id, $title, 'id' );
    set_post_thumbnail( $post_id, $image );
}

Methode 2: Anwenden eines Filters auf die Miniaturansicht des Beitrags.

Durch die Verwendung eines Filters können wir die Miniaturansicht des Beitrags "virtuell" festlegen. Mit dieser Methode können Sie die Miniaturansicht des Beitrags für alle Beiträge im Handumdrehen ändern.

Filter 1: post_thumbnail_html

Der post_thumbnail_html-Filter kann verwendet werden, um die HTML-Ausgabe für das Post-Thumbnail zu überschreiben:

/**
 * Filters the post thumbnail HTML.
 *
 * @param string       $html              The post thumbnail HTML.
 * @param int          $post_id           The post ID.
 * @param string       $post_thumbnail_id The post thumbnail ID.
 * @param string|array $size              The post thumbnail size. Image size or array of width and height
 *                                        values (in that order). Default 'post-thumbnail'.
 * @param string       $attr              Query string of attributes.
 */
add_filter( 'post_thumbnail_html', 'wpse_post_thumbnail_html', 10, 5 );
function wpse_post_thumbnail_html( $html, $post_id, $post_thumbnail_id, $size, $attr ) {
    return '<img src="https://www.cigarsofcuba.co.uk/acatalog/slide1.jpeg" alt="Have a cigar">';
}

Filter 2: Verwenden von get_post_metadata für den _thumbnail_id-Metaschlüssel.

Hier ist ein weiterer Ansatz, der die Thumbnail-ID jedes Posts mit einer anderen ID überschreibt.

Ich würde vorschlagen, eine Seite mit Customizer-Einstellungen oder -Optionen zu implementieren, auf der das spezielle Miniaturbild hochgeladen/ausgewählt werden kann (lokal, von einer URL oder aus der Medienbibliothek). Anschließend können Sie den get_post_metadata-Filter verwenden, um den Wert zu ändern, der dem _thumbnail_id-Metaschlüssel jedes Post-Thumbnails zugeordnet ist:

/**
 * Dynamic hook: "get_{$meta_type}_metadata"
 * 
 * Filters whether to retrieve metadata of a specific type.
 * 
 * The dynamic portion of the hook, `$meta_type`, refers to the meta
 * object type (comment, post, or user). Returning a non-null value
 * will effectively short-circuit the function.
 *
 * @param null|array|string $value     The value get_metadata() should return - a single metadata value,
 *                                     or an array of values.
 * @param int               $object_id Object ID.
 * @param string            $meta_key  Meta key.
 * @param bool              $single    Whether to return only the first value of the specified $meta_key.
 */
add_filter( 'get_post_metadata', 'wpse_featured_image_id_override', 100, 4 );
function wpse_featured_image_id_override( $value, $object_id, $meta_key, $single ) {
    $thumbnail_id_key = '_thumbnail_id';

    // Bail if this is not the correct meta key. Return the original value  immediately.
    if ( ! isset( $meta_key ) || $thumbnail_id_key !== $meta_key ) {
        return $value;
    }

    // Add additional guard clauses if necessary... (check post type, etc.)

    // Get the id for an image uploaded elsewhere.
    // This could be pulled from the customizer or a plugin options page.
    return 807;  // Example ID
}
3
Dave Romsey

Sie können das vorgestellte Bild (unabhängig davon, ob eines eingestellt ist oder nicht) beim Speichern der Seite/des Beitrags einfach so überschreiben:

//this is called on saving page/post
add_action('save_post', 'force_featured_image');

function force_featured_image( $post_id ){
   //set the featured image
   set_post_thumbnail( $post_id, [image_id] );
}

NOTEErsetzen Sie '[image_id]' durch Ihre Bild-ID.

3
Phill Healey