問題:メディアライブラリ(ビデオ)タブから挿入したときに 短いタグ をビデオの添付ファイルに自動的に追加するフックを追加します。
更新:
これは '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
これを実行する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つの異なる方法を試すことができます。
添付ファイルの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')) {
...
}
ショートコードがラップされている部分を削除するには、正規表現置換を使用して$ 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;
}
私の質問への回答 -
ただ変更してください:
if ($uploadType == 'video') {
に:
if (get_post_mime_type( $id ) == "application/pdf") {
ビデオマイムチェックについては、これは動作します:
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;
それが役に立てば幸い!