问题描述
例如…
add_action('init', 'reg_tax');
function reg_tax() {
register_taxonomy_for_object_type('category', 'attachment');
}
将”Category” 输入字段添加到媒体管理器和附件编辑器。我想知道它是否可能改变这个功能来取代”link destination” URL 。当点击图像时,URL 将被执行。
还需要知道如何检索这个新字段的值。
更新:感谢托马斯回答下面,这是我的最终解决方案…
function my_image_attachment_fields_to_edit($form_fields, $post) {
$form_fields["custom1"] = array(
"label" => __("Image Links To"),
"input" => "text",
"value" => get_post_meta($post->ID, "_custom1", true)
);
return $form_fields;
}
function my_image_attachment_fields_to_save($post, $attachment) {
if( isset($attachment['custom1']) ){
update_post_meta($post['ID'], '_custom1', $attachment['custom1']);
}
return $post;
}
add_filter("attachment_fields_to_edit", "my_image_attachment_fields_to_edit", null, 2);
add_filter("attachment_fields_to_save", "my_image_attachment_fields_to_save", null, 2);
最佳解决方案
我使用一个非常粗略的插件来添加关于艺术家的信息和一个 URL 到媒体文件。它需要一些调整 (我需要时间),但它可以演示如何添加额外的字段以及如何在您的主题中使用它们:
<?php
/*
Plugin Name: Toscho』s Media Artist Field
Description: Adds two field to attachments – Artist and Artist URL – and adds this information to captions.
Version: 0.1
Author: Thomas Scholz
Author URI: http://toscho.de
Created: 19.09.2010
*/
$Toscho_Media_Artist = new Toscho_Media_Artist(
array (
'artist_name' => array (
'public' => 'toscho_artist_name'
, 'hidden' => '_toscho_artist_name'
, 'label' => 'Fotograf (Name)'
)
, 'artist_url' => array (
'public' => 'toscho_artist_url'
, 'hidden' => '_toscho_artist_url'
, 'label' => 'Fotograf (URL)'
)
)
, 'Foto: '
);
/**
* Adds two fields for credits to any media file: name and URL.
*
* Based on the clear tutorial by Andy Blackwell:
* @link http://net.tutsplus.com/?p=13076
*
* @author "Thomas Scholz"
*
*/
class Toscho_Media_Artist
{
public
$fields = array (
'artist_name' => array (
'public' => 'toscho_artist_name'
, 'hidden' => '_toscho_artist_name'
, 'label' => 'Artist Name'
)
, 'artist_url' => array (
'public' => 'toscho_artist_url'
, 'hidden' => '_toscho_artist_url'
, 'label' => 'Artist URL'
)
)
// Maybe its own field?
, $caption_prefix
, $br_before = TRUE;
public function __construct(
$fields = array()
, $caption_prefix = 'Source: '
, $br_before = TRUE
)
{
$this->fields = array_merge($this->fields, $fields);
$this->caption_prefix = $caption_prefix;
$this->br_before = (bool) $br_before;
$this->set_filter();
}
public function set_filter()
{
add_filter(
'attachment_fields_to_edit'
, array ( $this, 'add_fields' )
, 15
, 2
);
add_filter(
'attachment_fields_to_save'
, array ( $this, 'save_fields' )
, 10
, 2
);
add_filter(
'img_caption_shortcode'
, array ( $this, 'caption_filter' )
, 1
, 3
);
}
public function add_fields($form_fields, $post)
{
foreach ( $this->fields as $field)
{
$form_fields[ $field['public'] ]['label'] = $field['label'];
$form_fields[ $field['public'] ]['input'] = 'text';
$form_fields[ $field['public'] ]['value'] = get_post_meta(
$post->ID
, $field['hidden']
, TRUE
);
}
return $form_fields;
}
public function save_fields($post, $attachment)
{
foreach ( $this->fields as $field)
{
if ( isset ( $attachment[ $field['public'] ]) )
{
update_post_meta(
$post['ID']
, $field['hidden']
, $attachment[ $field['public'] ]
);
}
}
return $post;
}
public function caption_filter($empty, $attr, $content = '')
{
/* Typical input:
*
*/
extract(
shortcode_atts(
array (
'id' => ''
, 'align' => 'alignnone'
, 'width' => ''
, 'caption' => ''
, 'nocredits' => '0'
)
, $attr
)
);
// Let WP handle these cases.
if ( empty ($id ) or 1 == $nocredits )
{
return '';
}
if ( 1 > (int) $width || empty ( $caption ) )
{
return $content;
}
if ( ! empty ( $id ) )
{
// Example: attachment_525
$html_id = 'id="' . esc_attr($id) . '" ';
$tmp = explode('_', $id);
$id = end($tmp);
$sub_caption = '';
$artist_name = get_post_meta($id, $this->fields['artist_name']['hidden'], TRUE);
$artist_url = get_post_meta($id, $this->fields['artist_url']['hidden'], TRUE);
// Okay, at least one value.
if ( '' != $artist_name . $artist_url )
{
$sub_caption .= $this->br_before ? '<br />' : '';
$sub_caption .= '<span class="media-artist">' . $this->caption_prefix;
// No name given. We use the shortened URL.
if ( '' == $artist_name )
{
$sub_caption .= '<a rel="author" href="'
. $artist_url . '">'
. $this->short_url($artist_url)
. '</a>';
} // We have just the name.
elseif ( '' == $artist_url )
{
$sub_caption .= $artist_name;
} // We have both.
else
{
$sub_caption .= '<a rel="author" href="'
. $artist_url . '">'
. $artist_name
. '</a>';
}
$sub_caption .= '</span>';
}
$caption .= $sub_caption;
}
return '<div ' . $html_id . 'class="wp-caption ' . esc_attr($align)
. '" style="width: ' . (10 + (int) $width) . 'px">'
. do_shortcode( $content ) . '<p class="wp-caption-text">'
. $caption . '</p></div>';
}
public function short_url($url, $max_length=20)
{
$real_length = mb_strlen($url, 'UTF-8');
if ( $real_length <= $max_length )
{
return $url;
}
$keep = round( $max_length / 2 ) - 1;
return mb_substr($url, 0, $keep, 'UTF-8') . '…'
. mb_substr($url, -$keep, $real_length, 'UTF-8');
}
# @todo uninstall
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。