Intereting Posts

Получить текст изображения в коротком коде, используя URL-адрес изображения

Я создаю короткий код, который выглядит так:

[hpLocationSquare locationimage="...wp-content/uploads/2017/04/Enfielddetails.jpg" /] 

Атрибут locationimage – это URL-адрес изображения в медиатеке.

В моем functions.php у меня есть следующий код:

 function hplocationsfn($atts, $content = null){ extract(shortcode_atts(array( 'locationimage'=>'' ), $atts)); return '<div class="locationSquare"> <a href="'.esc_attr($locationlink).'"> <img src="'.esc_attr($locationimage).'" /> </a> </div><!-- locationSquare -->'; } 

Он работает нормально.

Я действительно хочу, чтобы хоть как-то подобрать текст для изображения из библиотеки. Я мог бы добавить еще один атрибут, но это было бы глупо, если бы оно уже было. Есть ли способ получить текст для изображения?

благодаря

Вместо использования атрибута locationimage , почему бы не использовать ID вложения?

Это позволит вам динамически захватывать URL-адрес файла и сделает гораздо проще получать другие метаданные, такие как текст alt. Ниже приведена перезапись hplocationsfn() .

Пример использования: [hpLocationSquare id='2299' link='http://example.com']

Обратите внимание, что атрибут link является обязательным.

 function hplocationsfn( $atts ) { // Set up shortcode attributes. // User provided values are stored in $atts. // Default values are passed to shortcode_atts below. // Merged values are stored in the $a array. $a = shortcode_atts( [ 'id' => false, 'size' => 'thumbnail', 'link' => false, ], $atts ); // Bail if we don't have an image. if ( ! $a['id'] ) { return; } // Get the image and the image's alt value. $image = wp_get_attachment_image_src( $a['id'], $a['size'] ); $image_alt = get_post_meta( $a['id'], '_wp_attachment_image_alt', true ); // Bail if our image is invalid. if ( ! $image || empty ( $image ) ) { return; } // Generate the output. $output = '<div class="locationSquare">'; if ( $a['link'] ) { $output .= '<a href="' . esc_attr( $a['link'] ) .'">'; } $output .= '<img src="' . esc_attr( $image[0] ) . '" alt="' . esc_attr( $image_alt ) . '"/>'; if ( $a['link'] ) { $output .= '</a>'; } $output .= '</div><!-- locationSquare -->'; return $output; } add_shortcode( 'hpLocationSquare', 'hplocationsfn' ); 

Это может быть немного больно для пользователей, чтобы найти идентификатор вложения, поэтому вот функция, которая добавит идентификатор вложения на экран оверлея для мультимедиа:

 /** * Add custom field to media */ add_filter( 'attachment_fields_to_edit', 'wpse_attachment_fields_id', 10, 2 ); function wpse_attachment_fields_id( $fields, $post ) { $fields['attachment_id'] = [ 'label' => __( 'Attachment ID', 'text-domain' ), 'input' => 'html', 'value' => $post->ID, 'html' => "<input type='text' class='text attachment_idfield' readonly='readonly' name='attachments[{$post->ID}][attachment_id]' value='" . esc_attr( $post->ID ) . "' /><br />", 'show_in_edit' => true, ]; return $fields; } 

Изменить: получение идентификатора вложения из URL-адреса изображения.

Кроме того, мы можем получить идентификатор вложения с URL-адреса изображения, используя attachment_url_to_postid() .

Пример использования:

 [hpLocationSquare2 locationimage='http://img.wordpressask.com/shortcode/my-image.jpg' link='http://example.com/2/'] 

 function hplocationsfn2( $atts ) { // Set up shortcode attrubutes. // User provided values are stored in $atts. // Default valued are passed to shortcode_atts below. // Merged valued are stored in the $a array. $a = shortcode_atts( [ 'locationimage' => false, 'link' => false, ], $atts ); // Bail if we don't have an image. if ( ! $a['locationimage'] ) { return; } $image_id = attachment_url_to_postid( $a['locationimage'] ); if ( ! $image_id ) { return; } // Get the image and the image's alt value. $image_alt = get_post_meta( $image_id, '_wp_attachment_image_alt', true ); // Generate the output. $output = '<div class="locationSquare">'; if ( $a['link'] ) { $output .= '<a href="' . esc_attr( $a['link'] ) .'">'; } $output .= '<img src="' . esc_attr( $a['locationimage'] ) . '" alt="' . esc_attr( $image_alt ) . '"/>'; if ( $a['link'] ) { $output .= '</a>'; } $output .= '</div><!-- locationSquare -->'; return $output; } add_shortcode( 'hpLocationSquare2', 'hplocationsfn2' );