Como recortar a imagem da imagem src em um tamanho específico

4

Eu obtive a imagem src da entrada do usuário por um campo metabox. Agora quero renderizar essa imagem em um tamanho específico. Assim como a imagem do WordPress cortando em um tamanho específico.

Tentei obter o ID da imagem a partir do src e usei a função abaixo para obter a imagem src com uma imagem dimensionada.

<?php
$img_id = get_image_id($img_src);
$sized_img_src = wp_get_attachment_image_src($img_id, 'image_size');

E aqui está a função get_image_id() :

function get_image_id($image_url) {
global $wpdb;
$attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_url ));
return $attachment[0];
}

Na verdade, não estou recebendo os IDs de imagem das imagens enviadas com essa função. Onde está o problema?

    
por Eh Jewel 12.06.2017 / 18:36

1 resposta

3

O WordPress possui uma função projetada exclusivamente para esse fim. o attachment_url_to_postid() permite que você recupere o ID de um anexo de seu URL, que você pode usar para obter o ID do post posteriormente.

Se você quiser fazer isso escrevendo uma consulta MySQL, eu prefiro sugerir a busca do nome do arquivo em meta_value :

$basename = basename ($image_url);
$sql = "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value = '$basename '";
$id = $wpdb->get_var($sql);

As colunas GUID são codificadas no banco de dados depois que você publica uma postagem. Portanto, se você publicar uma postagem no host local, um exemplo de GUID será assim:

http://localhost/wp-content/uploads/my-image.jpg

Mas você pesquisará uma URL on-line de sua imagem usando:

$wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_url ));

Que não retornará nada, obviamente. No entanto, você pode usar LIKE em conjunto com o basename:

$img_name = basename ($image_url);
$wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid LIKE '%s';", $img_name ));

Qual é o mesmo que a primeira abordagem.

    
por Jack Johansson 13.06.2017 / 08:18