it-swarm.com.de

Neue Schaltfläche "In Beitrag einfügen" mit einer anderen Funktion hinzufügen

Problem: Fügen Sie einen Hook hinzu, der Videoanhängen beim Einfügen über die Registerkarte Medienbibliothek (Video) automatisch ein kurzes Tag hinzufügt:

Update:

Dies funktioniert unter der Registerkarte "Medienbibliothek" - und unterbricht keine Bildeinfügungen usw .:

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 = '[video src="'.$src.'"]';  
    }
    return $html; // return new $html
}

Fügt so etwas ein: [video src = "Pfad/zu/video/sample.mp4"]

Wenn Sie der Meinung sind, dass Sie den Code auf irgendeine Weise bereinigen können, zeigen Sie es uns.

Danke @wyrfel

3
PHearst

In wp-admin/includes/media.php gibt es eine get_image_send_to_editor() -Funktion, die Folgendes ausführt: apply_filters( 'image_send_to_editor', $html, $id, $caption, $title, $align, $url, $size, $alt );. Versuchen Sie, diesen Filter anzuschließen.

Edit: Hilfe beim Filteraufruf ... Dein Anruf zum Auflegen des Rückrufs würde so aussehen:

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

Die 10 ist die Priorität. Möglicherweise müssen Sie diese anpassen. 10 ist die Standardeinstellung. Ihre Filterfunktion muss ungefähr so ​​aussehen:

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

Um abzuleiten, was Sie im Rückruf tun müssen, habe ich so ziemlich alle Parameter, die Sie durchlaufen, zuerst auf den Bildschirm geschrieben. Wenn Sie etwas mehr benötigen, können Sie jederzeit die gesamten Anhangsdaten und Metadaten mit der $ id abrufen, die Sie durchlaufen haben.

Grundsätzlich können Sie jetzt zwei verschiedene Ansätze ausprobieren:

  1. Sie suchen nach dem Mime-Typ des Anhangs und ersetzen den gesamten $ html-Inhalt durch Ihren Shortcode, wenn es sich um ein Video handelt. Sie können den Medieneinstellungen eine Option hinzufügen, mit der der Benutzer konfigurieren kann, ob er dies wünscht oder nicht. Sie müssen nur das ganze Ding einhängen, wenn sie es tun. Bearbeiten: um nach Mime-Typen zu suchen:

    $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. Sie führen Ihren $ html-Inhalt durch ein reguläres Ersetzen aus, um die Bitsies zu entfernen, in die der Shortcode eingebunden ist. Wie dieses reguläre Ersetzen aussehen würde, hängt davon ab, wie der $ html-Inhalt normalerweise aussieht. Ich würde für die erste Option gehen, es ist solider und bessere Benutzeroberfläche. Ich verstehe, dass Sie dem Benutzer die Möglichkeit geben möchten, Optionen für Ihren Shortcode zu ändern, aber dies ist ein anderes Thema, und ich glaube, es ist möglich, die Felder im Medien-Popup zu optimieren, um dort einige Optionen hinzuzufügen.

Edit 3: vollständiges Beispiel:

// 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 = '[video src="'.$url.'"]';
    }
    return $html; // return new $html
}

Ok ... falscher Filter, anscheinend ... versuchen Sie Folgendes:

// 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 = '[video src="'.$href.'"]';
    return $html;
}

Ahh, wir haben noch eine:

// 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 = '[video src="'.$href.'"]';
    }
    return $html;
}
6
wyrfel

Antwort auf meine Frage-

nur ändern:

if ($uploadType == 'video') {

zu:

if (get_post_mime_type( $id ) == "application/pdf") {
2
Kam D

Über den Video-Mime-Check funktioniert Folgendes:

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;

Ich hoffe es hilft!

0
pmqa