I have taken a look at the source, unfortunately I haven’t seen a nice way to pass the information without saving it. Which sucks – big time – because this really isn’t anything that needs to be saved.
A workaround would be to enable PHP Sessions by putting the following at the beginning of your functions.php
:
if (!session_id()) {
session_start();
}
Now you are able to use $_SESSION
variables, like this:
$_SESSION[ 'your-key' ] = 'your-value';
Create your form field like this:
function wpse_154330_attachment_fields_to_edit( $form_fields, $post ) {
$current_screen = get_current_screen();
// we are not saving, so no need to show the field on the attachment page
if ( $current_screen->id == 'attachment' ) {
return $form_fields;
}
$form_fields['fancyboxGroup'] = array(
'label' => 'fancybox group',
'input' => 'text',
'value' => '', // leave the value empty
'helps' => 'use this to group images in fancybox',
);
return $form_fields;
}
add_filter(
'attachment_fields_to_edit',
'wpse_154330_attachment_fields_to_edit',
10,
2
);
Make use of the session variable like this:
function wpse154330_save_attachment_field( $post, $attachment ) {
// we're only setting up the variable, not changing anything else
if ( isset( $attachment[ 'fancyboxGroup' ] ) {
$_SESSION[ 'fancyboxGroup' ] = $attachment[ 'fancyboxGroup' ];
}
return $post;
}
add_filter(
'attachment_fields_to_save',
'wpse154330_save_attachment_field',
10,
2
);
Modify the output accordingly:
function wpse154330_image_send_to_editor(
$html,
$id,
$caption,
$title,
$align,
$url,
$size,
$alt=""
) {
// no need to modify the output, if no fancybox group is given
if (
empty( $_SESSION[ 'fancyboxGroup' ] )
|| ! isset( $_SESSION[ 'fancyboxGroup' ] )
) {
return $html;
}
$classes="fancybox";
if ( preg_match( '/<a.*? class=".*?">/', $html ) ) {
$html = preg_replace(
'/(<a.*? class=".*?)(".*?>)/',
'$1 ' . $classes . '$2',
$html
);
} else {
$html = preg_replace(
'/(<a.*?)>/',
'$1 class="'
. $classes
. '" data-fancybox-group="'
. $_SESSION[ 'fancyboxGroup' ]
. '" >',
$html
);
}
unset( $_SESSION[ 'fancyboxGroup' ] );
return $html;
}
add_filter(
'image_send_to_editor',
'wpse154330_image_send_to_editor',
10,
8
);
Thats about it. Should be pretty much self-explaining, otherwise just ask.