如何创建一个在iframe中嵌入pdf的快捷码?

时间:2014-12-09 作者:Casper

一般信息我正在用WordPress创建一个网站。对于我想要的内容,PDF文件可以嵌入到iframe中。所以我首先创建了一个WordPress函数来连接media_send_to_editor, 但这个功能的问题是,iframe将在WP的可视化编辑器中保留大量空间,因此对该页面进行其他编辑对可用性来说并不好。

所以我想,我应该寻找一个短代码来将PDF文件嵌入到iframe中。

问题

我正在尝试创建一个WordPress快捷码,它将获取PDF文件的src并将其粘贴到src属性中,这样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 个回复
SO网友:Joe Bop

这取决于您希望如何添加PDF,但这可能是一个覆盖所有:

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\' );
这应该在您的功能中。php或您自己的插件或类似的地方。

我注释掉了可能有潜在危险的属性,但如果您需要它们,它们就在那里。

然后,编辑器可以使用如下内容:

。。。

[iframe class=“my iframe”src=”http://example.com/mypdf.pdf“][/iframe]

。。。

。。。

[iframe id=“my iframe”附件\\u id=“193”][/iframe]

。。。

。。。

[iframe class=“my iframe”]<;p>;iframe中的我的段落</p>;[/iframe]

。。。

参考文献:W3C Wiki on iframe element, WP codex on shortcode api.

结束

相关推荐

YouTube oEmbedded和隐私增强模式

在iframe中嵌入youtube视频时,可以启用隐私增强模式,这样youtube在播放视频之前不会存储有关网页访问者的信息。我尝试通过oEmbed和URL嵌入视频http://www.youtube-nocookie.com/embed/xA3tfBTvH0c但它没有起作用。是否有机会使用oEmbed实现隐私友好的解决方案?编辑我找到的this proposal 并试图对其进行定制,但有一点并不是最优的。您不能使用定义的$content\\u width,因为此解决方案也需要声明高度。对这种方法有什么想