自动为元素生成多种图像大小

时间:2017-05-14 作者:Daniele Squalo

假设我想为多个设备实现一个符合要求的响应标头。要做到这一点(有一个漂亮的C效果),我需要图片的不同版本,调整大小并按侧面裁剪,然后将它们全部放在一个。。。块我可以上传它的多个版本,但这对用户来说并不友好,因为我不得不一张一张地创建图片。

我想加入

add_image_size("grand_neo", 320, 450, true);
至功能。php,然后在我的标题中。php获取

wp_get_attachment_image($id, \'grand-neo\');
其中$id是标题图像的id。但如何获得它呢?感谢任何愿意帮忙的人。

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

我在我的一些项目中也有类似的需求,通过从其URL获取图像ID,然后使用wp_get_attachment_image 因为它将返回带有srcset属性的标记。

为了获取图像ID,我使用Gustavo Bordoni的助手,如下所示here.

function attachment_url_to_postid( $url ) {
    global $wpdb;

    $dir = wp_upload_dir();
    $path = $url;

    if ( 0 === strpos( $path, $dir[\'baseurl\'] . \'/\' ) ) {
        $path = substr( $path, strlen( $dir[\'baseurl\'] . \'/\' ) );
    }

    $sql = $wpdb->prepare(
        "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = \'_wp_attached_file\' AND meta_value = %s",
        $path
    );
    $post_id = $wpdb->get_var( $sql );
    if ( ! empty( $post_id ) ) {
        return (int) $post_id;
    }
}
函数attachment\\u url\\u to\\u posted($url){全局$wpdb;

$dir = wp_upload_dir();
$path = $url;

if ( 0 === strpos( $path, $dir[\'baseurl\'] . \'/\' ) ) {
    $path = substr( $path, strlen( $dir[\'baseurl\'] . \'/\' ) );
}

$sql = $wpdb->prepare(
    "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = \'_wp_attached_file\' AND meta_value = %s",
    $path
);
$post_id = $wpdb->get_var( $sql );
if ( ! empty( $post_id ) ) {
    return (int) $post_id;
}
}

这是包装纸:

function get_attachment_id_by_url( $url ) {
    $post_id = attachment_url_to_postid( $url );

    if ( ! $post_id ){
        $dir = wp_upload_dir();
        $path = $url;
        if ( 0 === strpos( $path, $dir[\'baseurl\'] . \'/\' ) ) {
            $path = substr( $path, strlen( $dir[\'baseurl\'] . \'/\' ) );
        }

        if ( preg_match( \'/^(.*)(\\-\\d*x\\d*)(\\.\\w{1,})/i\', $path, $matches ) ){
            $url = $dir[\'baseurl\'] . \'/\' . $matches[1] . $matches[3];
            $post_id = attachment_url_to_postid( $url );
        }
    }

    return (int) $post_id;
}
然后,标记:

wp_get_attachment_image( $image_id, $args[\'desired_image_size_as_registered\'] );

希望有帮助。

结束