web-dev-qa-db-ja.com

ページテンプレートですべての画像をフルサイズにする

すべての投稿を最小限のフォーマットで出力するページテンプレートがあります。ヘッダー、フッター、サイドバーなどはありません。

このループでは、the_content()を使ってコンテンツ(テキストと画像)を出力します。

すべての画像を「フル」または「大きい」サイズで出力する必要があります。現在、ループ内のthe_content()は、これに似たimgタグを返しています - 常にサムネイルです。

    <img 
src="https://www.example.com/wp-content/uploads/sites/21/2016/10/sample-picture-150x150.jpg" 
    class="attachment-thumbnail size-thumbnail" alt="" 
    size="full" width="150" height="150">

これにより、画像の解像度が必要以上に低くなります。

wp_get_attachment_image_attributesフィルタを使用してsize属性を 'full'に強制しようとしましたが、うまくいきませんでした。

function my_fix_attachment_size($attr, $attachment, $size) {
  // Full width header images
    $attr['size'] = 'full';
  return $attr;
}
add_filter('wp_get_attachment_image_attributes', 'my_fix_attachment_size', 10 , 3);

フルサイズの画像を出力するためのthe_content()の入手方法は?投稿には画像やギャラリーがある可能性があるので、両方を処理する必要があります。

画像サイズを設定/変更する必要はありませんが、生成されたページでフルサイズを強制するだけです。生成されたページはドキュメントの作成に使用されるため、ビューポートサイズについても心配しません。

追加

多くのグーグルと期限切れの後、私は私のために働く解決策を思い付きました(答えとして以下)。もっと良い方法があると私は思うが、これが私のために働いた唯一の方法です。

追加の回答が歓迎されています。

2
Rick Hellewell

このコードは機能しますが、より効率的になるか、またはより良いフィルタに置き換えられる可能性があります。私はこの質問に対する答えからこのコードを修正しました。それは私が試して何時間も費やしたすべてのグーグルの中から最良の選択でした。 ここにリンクの説明を入力してください

あなたは(2つの場所で)あなたが欲しいサイズに 'full'を変える必要があるでしょう。必要に応じて他の配列要素を変更することもできます( 'extract'関数の後)。

私はこれを行うためのより簡単でより効率的な方法に寛容です。

 function change_image_size ($output, $attr) {
        global $post;  // needed to use in the id element
        extract(shortcode_atts(array(
            'order' => 'ASC',
            'orderby' => 'menu_order ID',
            'id' => $post->ID,
            'itemtag' => 'dl',
            'icontag' => 'dt',
            'captiontag' => 'dd',
            'columns' => 3,
            'size' => 'thumbnail',
            'include' => '',
            'exclude' => ''
        ), $attr));
        // here's where you can change/add an attribute to the shortcode
        $attr['size'] = 'full'; // change 'full' to desired size
        $id = intval($id);
        if ('Rand' == $order) {
            $orderby = 'none';
        }

        if (!empty($include)) {
            $include = preg_replace('/[^0-9,]+/', '', $include);
            $_attachments = get_posts(array('include' => $include, 
'post_status' => 'inherit', 'post_type' => 'attachment',
 'post_mime_type' => 'image', 'order' => $order,
 'orderby' => $orderby));

            $attachments = array();
            foreach ($_attachments as $key => $val) {
                $attachments[$val->ID] = $_attachments[$key];
            }
        } elseif (!empty($exclude)) {
            $exclude = preg_replace('/[^0-9,]+/', '', $exclude);
            $attachments = get_children(array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby));
        } else {
            $attachments = get_children(array('post_parent' => $id,
 'post_status' => 'inherit', 'post_type' => 'attachment', 
'post_mime_type' => 'image', 'order' => $order,
 'orderby' => $orderby));
        }

        if (empty($attachments)) {
            return '';
        }

    // Essentially these are only changes I've made
    // you can change the $output to your needs; including changing 'full' to your desired image size.
        $output = '';
        foreach ($attachments as $att_id => $attachment) {
            $output .= '<figure>' . wp_get_attachment_image($att_id, 'full') .

'<figcaption>' . wptexturize($attachment->post_excerpt) . 
'</figcaption></figure>';
        }   // change 'full' to desired size

        return $output;
    }
    add_filter('post_gallery', 'change_image_size', 10, 2);
0
Rick Hellewell