Добавление пользовательского входа для данных приписывает в модальных медиа вставки

Я пытаюсь добавить, что ввод текста во "Вводит Медиа", модальные в надежды на способность добавить html5 data- припишите родительской привязке изображений.

<a class="fancybox" href="..." data-fancybox-group=" "> <-Эта часть
<img class="wp-image-871" src="..." alt="..." width="245" height="333" />
</a>

До сих пор я смог добавить вход к модальному:

enter image description here

Использование кода ниже в моем functions.php файле:

function add_fancybox_input( $form_fields, $post ) {
$form_fields['fancyboxGroup'] = array(
'label' => 'fancybox group',
'input' => 'text',
'value' => 'testing',
'helps' => 'use this to group images in fancybox',
);
return $form_fields;
}

add_filter( 'attachment_fields_to_edit', 'add_fancybox_input', 10, 2 );

И я добавил data-fancybox-group="" к использованию привязки:

function give_linked_images_class($html, $id, $caption, $title, $align, $url, $size, $alt = '' ){
  $classes = 'fancybox'; // separated by spaces, e.g. 'img image-link'

  // check if there are already classes assigned to the anchor
  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="" >', $html);
  }
  return $html;
}
add_filter('image_send_to_editor','give_linked_images_class',10,8);

Это - то, где я застреваю... У меня есть место для ввода данных, и у меня есть место для данных для движения, но я не уверен, как получить данные от входа до data-fancybox-group.

8
12.07.2014, 19:37
3 ответа

Я смотрел на источник, к сожалению, я не видел хороший способ передать информацию, не сохраняя его. Который сосет - достижение - потому что это действительно - ничто, что должно быть сохранено.

Обходное решение должно было бы включить Сессии PHP путем помещения следующего в начале Вашего functions.php:

    if (!session_id()) {
        session_start();
    }

Теперь Вы можете использовать $_SESSION переменные, как это:

    $_SESSION[ 'your-key' ] = 'your-value';

Создайте свое поле формы как это:

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

Используйте переменную сеанса как это:

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

Измените вывод соответственно:

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

Это об этом. Должен в значительной степени самообъяснять, иначе просто спросить.

3
19.02.2020, 22:02

Необходимо смочь, вытягивают полевое использование get_post_meta.

function give_linked_images_class($html, $id, $caption, $title, $align, $url, $size, $alt = '' ){
  $classes = 'fancybox'; // separated by spaces, e.g. 'img image-link'

  // check if there are already classes assigned to the anchor
  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="'.get_post_meta($id, 'fancyboxGroup', true).'" >', $html);
  }
  return $html;
}
add_filter('image_send_to_editor','give_linked_images_class',10,8);

Кроме того, необходимо будет сцепиться в attachment_fields_to_save фильтр, если Вы уже не имеете, для сохранения поля, Вы добавили.

function wpse154330_save_attachment_field($post, $attachment) {
    if( isset($attachment['fancyboxGroup']) ){
            update_post_meta($post['ID'], 'fancyboxGroup', $attachment['fancyboxGroup']);
        }

    return $post;
}

add_filter( 'attachment_fields_to_save','wpse154330_save_attachment_field', 10, 2);

Необходимо также обновить Ваш add_fancybox_input функция. Измените значение для получения по запросу fancybox поля.

function add_fancybox_input( $form_fields, $post ) {
$form_fields['fancyboxGroup'] = array(
'label' => 'fancybox group',
'input' => 'text',
'value' => get_post_meta($post->ID, 'fancyboxGroup', true),
'helps' => 'use this to group images in fancybox',
);
return $form_fields;
}
add_filter( 'attachment_fields_to_edit', 'add_fancybox_input', 10, 2 );
3
19.02.2020, 22:02
  • 1
    , Это, кажется, работает, единственная проблема, которую я вижу, - то, что данные сохраняются через различные страницы. Как в том, если я добавляю, данные - приписывают изображению на одной странице, это сохраняет те данные, поэтому если я буду использовать то же изображение на другой странице данные - то атрибут должен будет быть сброшен. –  apaul 14.07.2014, 19:48
  • 2
    Существует ли способ добраться, ввод данных пользователем к данным - приписывают, не сохраняя его, или по крайней мере способ вытереть метаданные после того, как изображение вставляется в страницу? –  apaul 14.07.2014, 19:49
  • 3
    я думаю delete_post_meta($id, 'fancyboxGroup'); должен удалить сохраненный атрибут, но я не уверен, как заставить его стрелять после image_send_to_editor. –  apaul 14.07.2014, 20:36
  • 4
    +1, потому что это - распространенный способ сделать это. Существуют некоторые вещи, которые я изменил бы, как не показ поля на странице вложения, сохранив поле формы пустым и не делая никаких изменений, если это - как я сделал в своем ответе. –  Nicolai 15.07.2014, 02:21
  • 5
    Одна возможность использовала бы переходные процессы с (коротким) истечением. Вместо того, чтобы сохранить для регистрации meta. Тем путем не нужно было бы волноваться об удалении данных. @apaul34208 –  Nicolai 15.07.2014, 02:32

Я не уверен, является ли это лучшей вещью для Вас, но я предполагаю, что Вы могли бы дать ей попытку.

Получите данные из поля ввода и поместите его в форму на скрытом входе или чем-то и сделайте атрибут данных, когда окно Выбора Медиа закроется

$inputValue = $('.some_class').val();
$('.fancybox').data('fancybox-group', $inputValue);

Я знаю, что это звучит сумасшедшим, но это могло бы просто быть очень просто для Вас, и это могло бы добиться цели.

0
19.02.2020, 22:02
  • 1
    , Если это - jQuery, я не думаю именно так .data() предназначен, чтобы быть используемым api.jquery.com/jquery.data –  apaul 16.07.2014, 17:09
  • 2
    Протестируйте, если Вы не уверены. jQuery.data будет нужен элемент (селектор), но так как селектору дают $ ('.fancybox') затем Вы имеете, они Вводят / пара Значения и да, который корректен. –  Marius Talagiu 17.07.2014, 14:59

Теги

Похожие вопросы