Bonjour à tous !

Je viens de regarder pas mal de tutos qui m'ont vraiment bien éclairci l'esprit notamment sur la création d'un widget.

Je l'ai bien aménagé à ma sauce dans le but de faire un slider d'images reprisent d'un flux RSS. Cependant, voulant faire les choses bien, je voudrais appeler mon javascript dans le head histoire de rendre mon code un peu plus propre.

Je me suis renseigné du coté du "add_action("wp_head", "Ma_fonction");" mais rien ne va se mettre dans mon head ^^

J'ai donc été vers une autre solution qui était "wp_enqueue_script( 'unique-id', get_stylesheet_directory_uri() . '/name-of-file.js', false, 0.1 );" mais même résultat ... Rien ne se passe non plus ^^

Voici la fonction de mon widget :

function widget($args, $instances){
    extract($args);
    echo $before_widget;
    echo $before_title.$instances"titre"].$after_title;

    include_once(ABSPATH . WPINC . '/feed.php');

    wp_enqueue_script( 'unique-id', get_stylesheet_directory_uri() . '/name-of-file.js', false, 0.1 );
    // Get a SimplePie feed object from the specified feed source.
    $rss = fetch_feed($instances"url"]);
    if (!is_wp_error( $rss ) ) : // Checks that the object is created correctly 
        // Figure out how many total items there are, but limit it to 5. 
        $maxitems = $rss->get_item_quantity($instances"nombre"]); 

        // Build an array of all the items, starting with element 0 (first element).
        $rss_items = $rss->get_items(0, $maxitems); 
    endif;
    ?>

    <ul>
        <?php if ($maxitems == 0) echo '<li>No items.</li>';
        else
        // Loop through each feed item and display each item as a hyperlink.
        foreach ( $rss_items as $item ) : ?>
        <li>
            <a href='<?php echo esc_url( $item->get_permalink() ); ?>' title='<?php echo 'Posted '.$item->get_date('j F Y | g:i a'); ?>'><?php echo esc_html( $item->get_title() ); ?></a>
            <?php
            // Match the image tags in the content
            preg_match_all('/<img(^>]*)>/i', $item->get_content(), $matches);

            // Get all of the image tags
            $all_images = $matches[0];

            // Display the first image tag.
            echo $all_images[0];
            ?>
        </li>
        <?php endforeach; ?>
    </ul>
    <?php
    echo $after_widget;
}

Je pense être dans l'erreur j'en suis certain mais je peine à trouver la solution ^^

4 réponses


GeekPress
Réponse acceptée

Pour insérer un fichier javascript il faut utiliser l'action wp_enqueue_scripts

Dans ton header.php tu as bien la fonction wp_head() dans le <head> ?

Oui elle est bien appelée juste avant la fermeture de la balise </head>.
Je prends comme base le theme Twenty Eleven vierge.

J'ai encore fait une tripotée de tests hier sans succès.

Effectivement ! J'ai fait une faute de noob !!! Je ne faisais pas l'appel au bon endroit en fait. Il fallait faire l'appel dans ma fonction d'initialisation du widget ...

Merci GeekPress !

Si ça peut aider quelqu'un, voici le code final :

<?php
/*
    Plugin Name: La minute artistique
    Plugin URI: http://www.nuitlibertine.be/
    Description: RSS parsé pour Sidebar
    Author: F.Christiaen
    Version: 1.1
    Author URI: http://www.nuitlibertine.be/
*/
add_action("widgets_init","minute_artistique_init");
// Enregistrer la widget dans Wordpress
function minute_artistique_init(){
    register_widget("minute_artistique_widget");
}
// la class porte le nom du widget
class minute_artistique_widget extends WP_widget{

    // la fonction porte le nom du widget
    function minute_artistique_widget(){
        $options = array(
            "classname" => "MinuteArtistique-widget",
            "description" => "Le plaisir des images."
        );
        $this->WP_widget("widget-MinuteArtistique","La minute artistique", $options);

        wp_enqueue_script('slider', WP_CONTENT_URL . 'plugins/wp-MinuteArtistique/slider.js');
    }

    function widget($args, $instances){
        extract($args);
        echo $before_widget;
        echo $before_title.$instances"titre"].$after_title;

        include_once(ABSPATH . WPINC . '/feed.php');

        // Get a SimplePie feed object from the specified feed source.
        $rss = fetch_feed($instances"url"]);
        if (!is_wp_error( $rss ) ) : // Checks that the object is created correctly 
            // Figure out how many total items there are, but limit it to 5. 
            $maxitems = $rss->get_item_quantity($instances"nombre"]); 

            // Build an array of all the items, starting with element 0 (first element).
            $rss_items = $rss->get_items(0, $maxitems); 
        endif;
        ?>

        <ul>
            <?php if ($maxitems == 0) echo '<li>No items.</li>';
            else
            // Loop through each feed item and display each item as a hyperlink.
            foreach ( $rss_items as $item ) : ?>
            <li>
                <a href='<?php echo esc_url( $item->get_permalink() ); ?>' title='<?php echo 'Posted '.$item->get_date('j F Y | g:i a'); ?>'><?php echo esc_html( $item->get_title() ); ?></a>
                <?php
                // Match the image tags in the content
                preg_match_all('/<img(^>]*)>/i', $item->get_content(), $matches);

                // Get all of the image tags
                $all_images = $matches[0];

                // Display the first image tag.
                echo $all_images[0];
                ?>
            </li>
            <?php endforeach; ?>
        </ul>
        <?php
        echo $after_widget;
    }

    // Enregistrement du formulaire
    function update($new,$old){
        return $new;
    }

    // Création du formulaire
    function form($instances){
        $defaut = array(
            "titre" => "La minute artistique",
            "nombre" => "5"
        );
        $instances = wp_parse_args($instances,$defaut);
        ?>
        <p>
            <label for="<?php echo $this->get_field_id("titre"); ?>">Titre :</label>
            <input type="text" value="<?php echo $instances"titre"]; ?>" name="<?php echo $this->get_field_name("titre"); ?>" id="<?php echo $this->get_field_id("titre"); ?>" />
        </p>
        <p>
            <label for="<?php echo $this->get_field_id("url"); ?>">URL :</label>
            <input type="text" value="<?php echo $instances"url"]; ?>" name="<?php echo $this->get_field_name("url"); ?>" id="<?php echo $this->get_field_id("url"); ?>" />
        </p>
        <p>
            <label for="<?php echo $this->get_field_id("nombre"); ?>">Nombre à afficher :</label>
            <input type="text" value="<?php echo $instances"nombre"]; ?>" name="<?php echo $this->get_field_name("nombre"); ?>" id="<?php echo $this->get_field_id("nombre"); ?>" />
        </p>
        <?php
    }
}
?>