强制页面模板中的所有图像为全尺寸

时间:2018-08-23 作者:Rick Hellewell

我有一个页面模板,可以输出所有具有最小格式的帖子-没有页眉、页脚、边栏等。

使用循环,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 筛选以强制大小属性为“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() 要输出全尺寸图像?在帖子中,可能会有图片或图库,因此需要同时处理这两个问题。

请注意,我不需要设置/更改图像大小,只需在生成的页面中强制使用全尺寸即可。我也不担心视口大小,因为生成的页面用于创建文档。

Added

在google搜索了很多次之后,我想出了一个适合我的解决方案(以下是答案)。我怀疑有更好的方法可以做到这一点,但这是唯一对我有效的方法。

欢迎提供更多答案。

1 个回复
最合适的回答,由SO网友:Rick Hellewell 整理而成

这段代码可以工作,尽管我怀疑它可能更高效,或者被更好的过滤器替代。我根据这个问题的答案修改了这段代码,这是我花了几个小时试用的所有googles中最好的选择。enter link description here

您需要将“full”更改为您想要的大小(在两个位置)。您还可以根据需要更改其他数组元素(在“提取”函数之后)。

我愿意用更简单/更有效的方法来做这件事。

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

结束

相关推荐

Remove <p></p> after images

我对<p></p> 出现在my之后的标记<img....>. 以下是我在本地主机上查看生成的页面时显示的内容。。。<img src=\"/wp-content/themes/wunderful/assets/images/feedback-danielle.png\" alt=\"Danielle Johnson Deal Town FC Treasurer\"> <p></p> 请注意随机生成的<p>&