如何为图像源文本和URL向图像添加自定义域

时间:2016-09-27 作者:camputer

如何向图像中添加两个自定义字段,以允许我输入源名称的文本例如:shutterstock,然后将该文本链接到第二个自定义字段URL字段例如:shutterstock。com公司

有些解决方案不起作用或已经过时。

add\\u filter(\'attachment\\u fields\\u to\\u edit\',\'ac\\u add\\u image\\u source\',10,2);

函数ac\\u add\\u image\\u source($form\\u fields,$post){

$form_fields[\'source_name\'] = array(
    \'label\' => __(\'Source Name\'),
    \'input\' => \'text\',
    \'value\' => get_post_meta( $post->ID, \'_wp_attachment_source_name\', true ),
    \'helps\' => __(\'Add the name of the image source\'),
);

$form_fields[\'source_url\'] = array(
    \'label\' => __(\'Source URL\'),
    \'input\' => \'text\',
    \'value\' => get_post_meta( $post->ID, \'_wp_attachment_source_url\', true ),
    \'helps\' => __(\'Add the URL where the original image was posted\'),
);

return $form_fields;
}

/***保存信用字段**/add\\u筛选器(“attachment\\u fields\\u to\\u Save”,“ac\\u Save\\u image\\u source”,10,2);

函数ac\\u save\\u image\\u source($post,$attachment){

if ( isset( $attachment[\'source_name\'] ) ) {
    $source_name = get_post_meta( $post[\'ID\'], \'_wp_attachment_source_name\', true );
    if ( $source_name != esc_attr( $attachment[\'source_name\'] ) ) {
        if ( empty( $attachment[\'source_name\'] ) )
            delete_post_meta( $post[\'ID\'], \'_wp_attachment_source_name\' );
        else
            update_post_meta( $post[\'ID\'], \'_wp_attachment_source_name\', esc_attr( $attachment[\'source_name\'] ) );
    }
}

if ( isset( $attachment[\'source_url\'] ) ) {
    $source_name = get_post_meta( $post[\'ID\'], \'_wp_attachment_source_url\', true );
    if ( $source_name != esc_attr( $attachment[\'source_url\'] ) ) {
        if ( empty( $attachment[\'source_url\'] ) )
            delete_post_meta( $post[\'ID\'], \'_wp_attachment_source_url\' );
        else
            update_post_meta( $post[\'ID\'], \'_wp_attachment_source_url\', esc_attr( $attachment[\'source_url\'] ) );
    }
}

return $post;
}

1 个回复
SO网友:Jonny Perl

有几种不同的方法可以实现这一点。

最明显的一个是使用两个现有的图像字段-您是否已经使用了标题、标题、替换文本和描述?如果没有,这些都是可用的,您可以简单地向模板中添加一些代码,使用(比如)标题作为链接,使用描述作为源代码。

如果这看起来很混乱,或者您已经在使用图像字段,那么您也可以使用插件将类别提供给媒体项目。我最近成功地使用了这个:https://wordpress.org/plugins/wp-media-library-categories/

通过添加几行代码,您可以将图像类别与普通帖子类别分开存储:

/**
* 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\'; } );
通过这种方式,您可以将源存储为媒体类别,将URL放在类别描述字段中。这种方法的优点是,您可以在不更改单个图像数据的情况下全局更改源URL。

希望这有帮助。

EDIT

功能。您发现的php挂钩工作正常。要输出它存储的值,只需将图像的ID连同存储值的键一起传递给get\\u post\\u元函数。在下面的片段中,我假设图像是当前帖子的缩略图。

$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="<?php echo $source_url; ?>"><?php echo $source_name; ?></a>
如果你有什么困难,请告诉我。

EDIT 2

为了响应原始海报的请求,这里有一个过滤器,用于将新存储的源信息合并到通过WordPress编辑器插入的图像中。此函数和过滤器需要放在函数中。php文件。这将检查链接和源名称是否都存在。如果这样做,它将输出一个换行符和到源的链接,并在新窗口中打开。

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 = \'[caption id="\' . $id . \'" align="align\' . $align . \'" width="\' . $width . \'"]\' . $html . \' \' . $caption . $source . \'[/caption]\';

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

相关推荐

Images with overlay

我有一些图片在一个容器中,我想添加一个覆盖和图标。这不是现成的,但我找到了一些有用的代码:HTML:<div class=\"main\"> <span class=\"featured\"><img src=\"http://joshrodg.com/IMG_001-258x258.jpg\" title=\"\" alt=\"\"></span> </div> CSS:.featured {