phearst
  • 0
Новичок

Добавить новую кнопку quotInsert Into Postquot с другой функцией

  • 0

Проблема: добавьте хук, который автоматически добавляет короткий тег к видео вложениям при вставке из вкладки Медиатека (видео):

Обновлять:

Это работает на вкладке «Медиатека» и не прерывает вставки изображений и т. д.:

add_filter('media_send_to_editor', 'my_filter_iste', 20, 3);

function my_filter_iste($html, $id, $caption, $title, $align, $url, $size, $alt) {
    $attachment = get_post($id); //fetching attachment by $id passed through

    $mime_type = $attachment->post_mime_type; //getting the mime-type
    if (substr($mime_type, 0, 5) == 'video') { //checking mime-type
        $src = wp_get_attachment_url( $id );
        $html = ''.$src.'';  
    }
    return $html; // return new $html
}

Вставляет что-то вроде этого:

Если вы чувствуете, что можете очистить код любым способом, покажите нам.

Спасибо @wyrfel

Share
  1. В get_image_send_to_editor() wp-admin/includes/media.php есть функция, которая запускает это: apply_filters( 'image_send_to_editor', $html, $id, $caption, $title, $align, $url, $size, $alt ); . Попробуйте подключить этот фильтр.

    Редактировать: Помогите с вызовом фильтра… Ваш вызов для перехвата обратного вызова будет выглядеть так:

    add_filter('image_send_to_editor', array(&$MyClassReference, 'filter_iste'), 10, 8);
    

    10 — это приоритет, возможно, вам придется настроить его… 10 — это значение по умолчанию. Ваша функция фильтра должна выглядеть примерно так:

    function filter_iste($html, $id, $caption, $title, $align, $url, $size, $alt) {
        ...
        return $html;
    }
    

    Чтобы получить то, что вам нужно сделать в обратном вызове, я бы сначала вывел все параметры, которые вы получаете, на экран. Если вам нужно что-то еще, вы всегда можете получить все данные вложения и метаданные, используя полученный $id.

    По сути, теперь вы можете попробовать два разных подхода:

    1. Вы проверяете MIME-тип вложения и, если это видео, заменяете весь контент $html своим шорткодом. Вы можете добавить параметр в настройки мультимедиа, который позволяет пользователю настраивать, хотят ли они этого или нет. Вам нужно только зацепить все это, если они это сделают. Изменить: для проверки типов mime-видео:

      $attachment = get_post($id);
      $mime_type = $attachment->post_mime_type;
      if (substr($mime_type, 0, 5) == 'video' && get_option('use_video_shorty_on_insert')) {
          ...
      }
      
    2. Вы запускаете свой контент $html через замену регулярного выражения, чтобы удалить биты, в которые заключен шорткод. То, как будет выглядеть это регулярное выражение, зависит от того, как обычно выглядит содержимое $html. Я бы выбрал первый вариант, он более надежный и лучший пользовательский интерфейс. Я понимаю, что вы можете захотеть дать пользователю возможность изменять параметры вашего шорткода, но это другая тема, и я считаю, что можно настроить поля во всплывающем окне мультимедиа, чтобы добавить туда некоторые параметры.

    Редактировать 3: полный пример:

    // this seems to be an additional filter running for images only
    add_filter('image_send_to_editor', 'my_filter_iste', 20, 8);
    
    function my_filter_iste($html, $id, $caption, $title, $align, $url, $size, $alt) {
        $attachment = get_post($id); //fetching attachment by $id passed through
        $mime_type = $attachment->post_mime_type; //getting the mime-type
        if (substr($mime_type, 0, 5) == 'video') { //checking mime-type
            //if a video one, replace $html by shortcode (assuming $url contains the attachment's file url)
            $html = ''.$url.'';
        }
        return $html; // return new $html
    }
    

    Хорошо… неправильный фильтр, видимо… попробуйте это:

    // this seems to run when inserting a video via the 'From URL' tab
    add_filter('video_send_to_editor_url', 'my_filter_vsteu', 20, 3);
    
    function my_filter_vsteu($html, $href, $title) {
        $html = ''.$href.'';
        return $html;
    }
    

    Ааа, у нас есть еще один:

    // this seems to run generically for any media item from the 'Upload' tab
    add_filter('media_send_to_editor', 'my_filter_mste', 20, 3);
    
    function my_filter_mste($html, $send_id, $attachment) {
        if (substr($attachment->post_mime_type, 0, 5) == 'video') {
            $href = wp_get_attachment_url($attachment->ID);
            $html = ''.$href.'';
        }
        return $html;
    }
    
    • 0
  2. Ответ на мой вопрос-

    просто измените:

    if ($uploadType == 'video') {
    

    к:

    if (get_post_mime_type( $id ) == "application/pdf") {
    
    • 0
  3. Что касается проверки mime видео, это работает:

    function my_filter_mste($html, $send_id, $attachment_id) {
    
    global $wpdb;
    
    $postDetails = $wpdb->get_row( $wpdb->prepare("SELECT post_mime_type FROM $wpdb->posts WHERE ID = %s", $send_id) );
    $type = explode("/", $postDetails->post_mime_type);
    $uploadType = strtolower($type[0]);
    
    if ($uploadType == 'video') {
    $href = $attachment_id['url']; 
    $html = '[stream flv='.$href.' mp4='.$href.' embed=false share=false width=480 height=360 autostart=false /]';
    }
    return $html;
    

    Надеюсь, поможет!

    • 0

Оставить ответ

You must login to add an answer.