web-dev-qa-db-ja.com

Iframeにpdfを埋め込むためのショートコードを作成するにはどうすればいいですか?

一般情報

WordPressでサイトを作成しています。コンテンツとしては、PDFファイルをiframe内に埋め込むことができます。そこで私は最初にmedia_send_to_editorをフックするWordPress関数を作成しましたが、この関数の問題はiframeがWPのビジュアルエディタ内に多くのスペースを予約するので、そのページへの他の編集は使い勝手には良くないということです。

それで、私はPDFファイルをiframeの中に埋め込むためのショートコードを探すべきだと考えました。

問題

PDFファイルのsrcを取得してそれをsrc属性内に貼り付けるWordPressショートコードを作成しようとしているので、PDFはiframe内に表示されます。下のコードの断片だけが私にWordPressの白い画面を表示させますが、それはもう機能しません。

いくつかのアドバイスを探してください。ありがとうございました。

function embed_pdf_files( $atts, $content = null ) {

    extract(shortcode_atts(array(
        $src = wp_get_attachment_url();
    ), $atts));
    return '<iframe width="100%" height="1000" src="' . $content . '"></iframe>';

}
add_shortcode( 'embed_pdf' , 'embed_pdf_files' );
1
Casper

それはあなたがどのようにpdfsを加えたいかによりますが、これはおそらくすべてをカバーするべきです:

function embed_pdf_files( $atts, $content = null ){

    //add default attributes here.
    $defaults = array(
        //'width' => '100%',
        //'height' => '1000'
    );

    //This overwrites defaults with the attributes in shortcode
    $a = shortcode_atts( $defaults, $atts );

    $src = $a['src'];

    //If no src present, get src by attachment id
    if( ! $src && $a['attachment_id'] ){
        $src = get_attachment_link( $a['attachment_id'] );
    }

    //If no src or content (srcdoc), return nothing.
    if( ! $src && ! $content ){
        return '';
    }

    //Comment out/in the attributes you want to allow the editor control over
    $html_attrs = '';
    //src
    $html_attrs .=  $src ? ' src="' . esc_attr( $a['src'] ) . '"' : '';
    //srcdoc
    $html_attrs .= ( ! $src && $content ) ? ' srcdoc="' . esc_attr( $content ) . '"' : '';
    //width
    $html_attrs .=  $a['width'] ? ' width="' . esc_attr( $a['width'] ) . '"' : '';
    //height
    $html_attrs .=  $a['height'] ? ' height="' . esc_attr( $a['height'] ) . '"' : '';
    //seamless
    $html_attrs .=  array_key_exists( 'seamless', $a ) ? ' seamless' : '';
    //name
    //$html_attrs .=  $a['name'] ? ' name="' . esc_attr( $a['name'] ) . '"' : '';
    //sandbox
    //$html_attrs .=  $a['sandbox'] ? ' sandbox="' . esc_attr( $a['sandbox'] ) . '"' : '';

    //These are the global html tag attributes - remove any you don't want editable
    $global_attrs = array( 'accesskey', 'class', 'contenteditable', 'contextmenu', 'dir', 'draggable', 'hidden', 'id', 'lang', 'spellcheck', 'style', 'tabindex', 'title' );

    for( $i = 0; $i < count( $global_attrs ); $i++ ){
        $html_attrs .=  array_key_exists( $global_attrs[$i], $a ) ? ' ' . $global_attrs[$i] . '="' . esc_attr( $a[ $global_attrs[$i] ] ) . '"' : '';
    }

    return '<iframe' . $html_attrs . '></iframe>';

}
add_shortcode( 'embed_pdf', 'embed_pdf_files' );

これはあなたのfunctions.phpかあなた自身のプラグインかどこかに似た場所にあるべきです。

私は潜在的に危険となり得る属性についてコメントしましたが、あなたがそれらを必要とするならば、それらはそこにあります。

エディタはこのようなものを使うことができます。

...

[iframeクラス= "my-iframe" src = "http://example.com/mypdf.pdf"] [/ iframe]

...

または

...

[iframe id = "my-iframe" attachment_id = "193"] [/ iframe]

...

または

...

[iframe class = "my-iframe"] <p> iframe内の私の段落</p> [/ iframe]

...

参照: iframe要素に関するW3C Wikiショートコードapiに関するWPコーデック

1
Joe Bop