WordPress

Jak dodać niestandardowe pola do obrazów dla tekstu źródła obrazu i adresu URL

  • 27 września, 2016
  • 4 min read
Jak dodać niestandardowe pola do obrazów dla tekstu źródła obrazu i adresu URL


Możesz to osiągnąć na kilka różnych sposobów.

Najbardziej oczywistym byłoby użycie dwóch istniejących pól obrazu – czy używasz już tytułu, podpisu, tekstu alternatywnego i opisu? Jeśli nie, są one dostępne i możesz po prostu dodać kod do swojego szablonu, aby użyć (powiedzmy) podpisu jako łącza i opisu jako źródła.

Jeśli wydaje się to chaotyczne lub jeśli już korzystasz z pól obrazu, możesz również użyć wtyczki, aby udostępnić kategorie elementom multimedialnym. Ostatnio z pewnym sukcesem użyłem tego:

Po dodaniu kilku linii kodu pozwala to przechowywać kategorie obrazów oddzielnie od zwykłych kategorii postów:

/**
* separate media categories from post categories
* use a custom category called 'category_media' for the categories in the media library
*/
add_filter( 'wpmediacategory_taxonomy', function(){ return 'category_media'; } );

W ten sposób możesz przechowywać źródła jako kategorie mediów, umieszczając adres URL w polu opisu kategorii. Zaletą tego podejścia byłaby możliwość globalnej zmiany źródłowych adresów URL bez zmiany danych poszczególnych obrazów.

Mam nadzieję że to pomoże.

EDYTOWAĆ

Znaleziony hak functions.php działa dobrze. Aby wyświetlić wartości, które przechowuje, wystarczy przekazać identyfikator obrazu do funkcji get_post_meta wraz z kluczami dla przechowywanych wartości. W poniższym fragmencie zakładam, że obraz jest miniaturą bieżącego postu.

$source_url = get_post_meta(get_post_thumbnail_id(get_the_ID()),'_wp_attachment_source_url', true);
$source_name = get_post_meta(get_post_thumbnail_id(get_the_ID()),'_wp_attachment_source_name', true); ?>
<a href=" echo $source_url; ?>"><?php echo $source_name; ?></a>

Daj mi znać, jeśli masz jakieś problemy.

Warto przeczytać!  Oddzielna pętla pierwszego postu — WordPress Development Stack Exchange

EDYCJA 2

W odpowiedzi na prośbę pierwotnego autora, oto filtr, który włącza nowo zapisane informacje o źródle do obrazów wstawianych za pomocą edytora WordPress. Ta funkcja i filtr muszą być również umieszczone w pliku functions.php. To sprawdza, czy istnieje zarówno łącze, jak i nazwa źródła. Jeśli tak, wyświetla podział wiersza i link do źródła, otwierając się w nowym oknie.

function image_add_caption_with_source( $html, $id, $caption, $title, $align, $url, $size, $alt="" ) {

  /**
   * Filters the caption text and adds source info.
   *
   * Note: If the caption text is empty, the caption shortcode will not be appended
   * to the image HTML when inserted into the editor.
   *
   * Passing an empty value also prevents the {@see 'image_add_caption_shortcode'}
   * Filters from being evaluated at the end of image_add_caption().
   *
   * @since 4.1.0
   *
   * @param string $caption The original caption text.
   * @param int    $id      The attachment ID.
   */
  $caption = apply_filters( 'image_add_caption_text', $caption, $id );
  $source_url = get_post_meta($id,'_wp_attachment_source_url', true);
  $source_name = get_post_meta($id,'_wp_attachment_source_name', true);
  /**
   * Filters whether to disable captions.
   *
   * Prevents image captions from being appended to image HTML when inserted into the editor.
   *
   * @since 2.6.0
   *
   * @param bool $bool Whether to disable appending captions. Returning true to the filter
   *                   will disable captions. Default empty string.
   */
  if ( empty($caption) || apply_filters( 'disable_captions', '' ) )
    return $html;

  $id = ( 0 < (int) $id ) ? 'attachment_' . $id : '';

  if ( ! preg_match( '/width=["\']([0-9]+)/', $html, $matches ) )
    return $html;

  $width = $matches[1];

  $caption = str_replace( array("\r\n", "\r"), "\n", $caption);
  $caption = preg_replace_callback( '/<[a-zA-Z0-9]+(?: [^<>]+>)*/', '_cleanup_image_add_caption', $caption );

  // Convert any remaining line breaks to <br>.
  $caption = preg_replace( '/[ \n\t]*\n[ \t]*/', '<br />', $caption );

  $html = preg_replace( '/(class=["\'][^\'"]*)align(none|left|right|center)\s?/', '$1', $html );
  if($source_url && $source_name):
   $source="<br /><a target="_blank" href="".$source_url.'">'.$source_name.'</a>';
  else:
   $source = "";
  endif;
  if ( empty($align) )
    $align = 'none';

  $shcode="' . $html . ' ' . $caption . $source . '';

  /**
   * Filters the image HTML markup including the caption shortcode.
   *
   * @since 2.6.0
   *
   * @param string $shcode The image HTML markup with caption shortcode.
   * @param string $html   The image HTML markup.
   */

  return apply_filters( 'image_add_caption_shortcode', $shcode, $html );
}


// remove the existing filter
remove_filter( 'image_send_to_editor', 'image_add_caption', 20, 8 );
// add the new filter
add_filter( 'image_send_to_editor', 'image_add_caption_with_source', 20, 8 ); 


Źródło

Warto przeczytać!  WordPress 6.4 Release Candidate 2 – Wiadomości WordPress