web-dev-qa-db-ja.com

別の機能を持つ新しい「投稿に挿入」ボタンを追加

問題:メディアライブラリ(ビデオ)タブから挿入したときに 短いタグ をビデオの添付ファイルに自動的に追加するフックを追加します。

更新:

これは 'Media Library'タブの下で動作します - そして画像の挿入などを壊すことはありません。

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
}

次のようなものを挿入します。[video src = "パス/ to/video/sample.mp4"]

何らかの方法でコードをクリーンアップできると思われる場合は、Googleに表示してください。

ありがとう@wyrfel

3
PHearst

これを実行する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を使用して添付ファイルデータとメタデータ全体をいつでも取得できます。

基本的に、2つの異なる方法を試すことができます。

  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コンテンツを実行します。regexpがどのように表示されるかは、$ htmlコンテンツが通常どのように表示されるかによって異なります。私は最初の選択肢に行きます、それはより堅実でより良いUIです。私はあなたがあなたにあなたのショートコードのためにオプションを変更する能力をユーザーに与えることを望むかもしれないことを理解する、しかしこれは別の話題である。

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

ええと、もう1つあります。

// 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

私の質問への回答 -

ただ変更してください:

if ($uploadType == 'video') {

に:

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

ビデオマイムチェックについては、これは動作します:

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
pmqa