web-dev-qa-db-ja.com

直接URLから注目の画像を取得するWordpressのフック?

私は自分のサイトでたくさんのプラグインを使っているので、もっと多くのプラグインを最小限にするようにしています。

Imageshackでホストされている画像を使用し、それを注目画像として使用できるように使用できるワードプレスフックがあるかどうかと思いました画像を自分のワードプレスサイトに保存していない

それでも可能ですか?これは本当に複雑な要求のように思えます。笑

1
Aurora Afable

最初に試してください:悪いもの

これを試したことがありますか solution ?いくつかの変更を加えれば、それはあなたの質問にもうまくいくはずです。

2番目の試み:解決策を備えた本当のアプローチ!

WordPressインストールで画像ファイルを保存せずにURLベースの機能画像を使用したいが、それでもテーマ/プラグイン内に実装されたWordPress機能を使用したい場合は、WPのメディアの表現方法を知る必要があります:

ファイルをアップロードすると、WordPressはそのURLを使用して画像やファイルを参照せず、添付ファイルを使用します。添付ファイルは、添付ファイルタイプの投稿であり、投稿IDによって参照されます。たとえば、投稿におすすめの画像を設定すると、選択した画像の投稿IDがその投稿のメタ_thumbnail_idに格納されます。

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

結論:URLベースの注目画像はWP環境では予測されていません。

それでも達成したい場合は、3つの簡単なステップがあります。

  1. wp_get_attachment_image_src()の結果をフィルタして、url文字列を_thumbnail_idではなく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. 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. 投稿メタsave_post(=おすすめの画像ID/URL)を処理する_thumbnail_idフィルタを追加します。

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

これで、テーマにURLベースのおすすめ画像を使用できます。

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