web-dev-qa-db-fra.com

Comment créer un shortcode pour l'intégration de pdf dans iframe?

Informations générales

Je crée un site avec WordPress. Pour le contenu, je souhaite que les fichiers PDF puissent être incorporés dans un iframe. J'ai donc d'abord créé une fonction WordPress à connecter à media_send_to_editor, mais le problème de cette fonction est que l'iframe réservera beaucoup d'espace dans l'éditeur visuel de WP, si bien que d'autres éditions sur cette page ne sont pas bonnes pour la facilité d'utilisation.

J'ai donc pensé que je devrais rechercher un shortcode pour intégrer le fichier PDF dans un iframe.

Problème

J'essaie de créer un shortcode WordPress qui récupère le src du fichier PDF et le colle dans l'attribut src, de sorte que le PDF soit visible dans l'iframe. Seul l’extrait de code ci-dessous me donnera un écran blanc de WordPress, qui ne fonctionne plus.

Cherchez des conseils. Je vous remercie.

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

Cela dépend de la façon dont vous voulez ajouter les fichiers PDF, mais cela devrait probablement couvrir tout:

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' );

Cela devrait être dans votre functions.php ou dans votre propre plugin ou quelque chose de similaire.

J'ai commenté les attributs qui peuvent être potentiellement dangereux, mais si vous en avez besoin, ils sont là.

L'éditeur peut alors utiliser quelque chose comme ceci:

...

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

...

ou

...

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

...

ou

...

[iframe class = "mon-iframe"] <p> Mon paragraphe dans un iframe </ p> [/ iframe]

...

Références: W3C Wiki sur élément iframe , codex WP sur api shortcode .

1
Joe Bop