web-dev-qa-db-fra.com

Un crochet Wordpress qui obtient une image sélectionnée à partir d'une URL directe?

J'utilise beaucoup de plugins sur mon site alors j'essaie de minimiser le nombre de plugins.

Je me demandais s'il y avait un hook wordpress que je peux utiliser pour pouvoir utiliser une image hébergée sur imageshack et l'utiliser comme image sélectionnée sansenregistrer l'image sur mon site wordpress?

Est-ce que c'est possible? Cela ressemble à une demande vraiment compliquée. lol

1
Aurora Afable

Premier essai: un mauvais

Avez-vous essayé cette solution ? Avec quelques adaptations, cela devrait également fonctionner pour votre question.

Deuxième essai: Une vraie approche avec une solution!

Si vous souhaitez utiliser une image sélectionnée basée sur une URL, sans enregistrer le fichier image dans votre installation WordPress, tout en utilisant les fonctions WordPress implémentées dans votre thème/plug-in, vous devez savoir comment le support dans WP est représenté. :

Lorsque vous téléchargez un fichier, WordPress ne référence pas l'image ou le fichier à l'aide de son URL, il utilise une pièce jointe. Les pièces jointes sont des publications de type pièce jointe et sont désignées par leur ID. Par exemple, lorsque vous définissez une image sélectionnée sur une publication, celle-ci stocke l'ID de publication de l'image choisie dans la méta _thumbnail_id de cette publication.

Source: http://www.wptherightway.org/en/post_types/index.html (2016-03-14 01:23 UTC)

Conclusion:Les images en vedette basées sur une URL ne sont pas prévues dans l'environnement WP.

Si vous voulez toujours y arriver, il y a 3 étapes simples:

  1. Filtrez le résultat wp_get_attachment_image_src() pour autoriser les chaînes d'URL en tant que _thumbnail_id au lieu de post_id.

    function my_get_attachment_image_src($image, $attachment_id, $size, $icon){
        if (empty($attachment_id)) return $image;
        if (
            (string) intval($attachment_id) != (string) $attachment_id && 
            $attachment_id != ''
        ) {
            $image[0]= $attachment_id;
        }
        return $image;
    }
    
    add_filter( 'wp_get_attachment_image_src', 'my_get_attachment_image_src', 10, 4);
    
  2. Créez une boîte méta supplémentaire pour les publications et les pages afin d'afficher et de définir les images en vedette basées sur une URL.

    function add_my_meta_box() {
        add_meta_box(
            'post_thumbnail_url',
            __('External URL as featured Image'),
            'my_meta_box',
            'post',
            'side',
            'low'
        );
        add_meta_box(
            'page_thumbnail_url',
            __('External URL as featured Image'),
            'my_meta_box',
            'page',
            'side',
            'low'
        );
    }
    
    function my_meta_box($post) {
        $attachment_url = get_the_post_thumbnail_url($post->ID);
        if (
            (string) intval($attachment_url) != (string) $attachment_url && 
            $attachment_url != ''
        ) {
            echo "<img width='100%' id='my_thumbnail_preview' src='{$attachment_url}'>";
        }
        $placeholder = __('e.g. http://foo.bar/image.jpg');
        echo "<input type='text' placeholder='{$placeholder}' name='my_thumbnail_url' id='my_thumbnail_url' value='{$attachment_url}'>";
    }
    
    add_action( 'add_meta_boxes', 'add_my_meta_box');
    
  3. Ajoutez un filtre save_post pour gérer la publication meta _thumbnail_id (= ID d'image/URL sélectionnée).

    function save_my_thumbnail_url($post_id) {
        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
            return;
        if ( !current_user_can( 'edit_post', $post_id ) )
            return;
        if ($_POST['my_thumbnail_url'] && !empty($_POST['my_thumbnail_url'])) {
            update_post_meta($post_id, '_thumbnail_id', $_POST['my_thumbnail_url']);
    }
        //TODO: Handle empty featured image url.
    }
    
    add_action( 'save_post', 'save_my_thumbnail_url', 99);
    

Vous pouvez maintenant utiliser l'image sélectionnée basée sur l'URL dans votre thème.

the_post_thumbnail();
// or…
$image_url = get_the_post_thumbnail_url(get_the_ID());
echo "<img src='{$image_url}'>"
5
iantsch