web-dev-qa-db-fra.com

Comment créer un code HTML incorporé à publier WP messages sur d'autres sites Web non-WP?

Je souhaite proposer un code intégré sur mon blog WP permettant aux utilisateurs de republier des publications récentes sur leurs sites Web à l'aide d'un fragment de code HTML/Javascript qu'ils peuvent copier depuis mon site WP et coller dans leur site non-WP.

Pouvez-vous aider les gars?

5
jnthnclrk

En gros, vous devez créer une zone en dehors de votre thème actuel dans laquelle créer du contenu que vous pouvez coller dans un iframe.

Vous venez de donner à votre utilisateur quelque chose comme ça:

<iframe src="http://yoursite.com/iframe/"></iframe>

Et ils ont vos messages sur leur site!

La première étape consiste à créer un point de terminaison d'URL pour votre iframe. Vous devez d’abord ajouter une règle de réécriture pour l’iframe, puis filtrer la variable de requête pour vous assurer que WordPress reconnaît votre nouvelle requête iframe et ne la supprime pas.

<?php
add_action( 'init', 'wpse32725_add_rewrite' );
/**
 * Adds the rewrite rule for our iframe
 * 
 * @uses add_rewrite_rule
 */
function wpse32725_add_rewrite()
{
    add_rewrite_rule(
        '^iframe$',
        'index.php?iframe=true',
        'top'
    );
}

add_filter( 'query_vars', 'wpse32725_filter_vars' );
/**
 * adds our iframe query variable so WP knows what it is and doesn't
 * just strip it out
 */
function wpse32725_filter_vars( $vars )
{
    $vars[] = 'iframe';
    return $vars;
}

Ensuite, connectez-vous à template_redirect et "catch" chaque fois que la variable de requête iframe est présente. Si c'est le cas, vous pouvez faire ce que vous voulez. Par exemple. obtenir une liste des messages et les afficher.

<?php
add_action( 'template_redirect', 'wpse32725_catch_iframe' );
/**
 * Catches our iframe query variable.  If it's there, we'll stop the 
 * rest of WP from loading and do our thing.  If not, everything will
 * continue on its merry way.
 * 
 * @uses get_query_var
 * @uses get_posts
 */
function wpse32725_catch_iframe()
{
    // no iframe? bail
    if( ! get_query_var( 'iframe' ) ) return;

    // Here we can do whatever need to do to display our iframe.
    // this is a quick example, but maybe a better idea would be to include
    // a file that contains your template for this?
    $posts = get_posts( array( 'numberposts' => 5 ) );
    ?>
    <!doctype html>
    <html <?php language_attributes(); ?>>
    <head>
        <?php /* stylesheets and such here */ ?>
    </head>
    <body>
        <ul>
            <?php foreach( $posts as $p ): ?>
                <li>
                    <a href="<?php echo esc_url( get_permalink( $p ) ); ?>"><?php echo esc_html( $p->post_title ); ?></a>
                </li>
            <?php endforeach; ?>
        <ul>
    </body>
    </html>
    <?php
    // finally, call exit(); and stop wp from finishing (eg. loading the
    // templates
    exit();
}

Tout ce qui reste à faire est de créer un endroit où vos utilisateurs peuvent obtenir le code iframe. Vous pouvez utiliser un code court pour le faire ou simplement créer une fonction (comme celle ci-dessous) pour coller à votre thème un endroit.

<?php
function wpse32725_iframe_code()
{
    return sprintf(
        '<code>&lt;iframe src="%s"&gt;&lt;/iframe&gt;</code>',
        esc_url( home_url('/iframe/') )
    );
}

Voici tout ce que comme un plugin .

4
chrisguitarguy

Je comprends que vous souhaitez présenter à vos utilisateurs un fichier JS qu’ils peuvent intégrer à leurs sites Web pour obtenir les derniers messages de votre blog WP. J'essaierais un analyseur RSS :)

Découvrez ceci: https://stackoverflow.com/questions/226663/parse-rss-with-jquery

En citant une réponse à partir de la question liée, le moyen le plus simple de le faire avec jQuery est, https://stackoverflow.com/a/7067582/807101

1
Sterex

Vous devez simplement prendre le code tiers et l'envelopper dans un widget WordPress, à l'aide de l'API Widgets .

En ce qui concerne les widgets Twitter que vous avez spécifiquement mentionnés, Je me suis déjà donné pour objectif de placer le code Twitter dans un widget WordPress et de le publier sous forme de plugin , mon plugin servira peut-être de guide utile pour l’utilisation de cette méthode. pour d'autres scripts tiers.

0
Chip Bennett

... cette fonctionnalité existe déjà par défaut.

Tout site WordPress peut publier un flux RSS externe dans un widget de son site. Tant que vous produisez un flux RSS de votre contenu, d'autres WP sites peuvent republier ce contenu via un widget.

Si vous souhaitez écrire un plug-in personnalisé à cette fin (c.-à-d. Créer un système unique et installable ne nécessitant pas que les utilisateurs finaux connaissent ou comprennent RSS), c'est en fait assez simple.

En fait, je publie un plugin qui permet à WP propriétaires de sites de republier le contenu d'un site WordPress dans leur barre latérale. C'est un site spécifique et je ne publie que les résultats d'une requête de recherche spécifique.

Voicigrossièrement _ ce qu'il fait:

  1. Tirez le RSS du site distant
  2. Analyser le flux RSS pour le dernier post (je ne liste que le plus récent).
  3. Afficher le dernier message sous forme de widget dans la barre latérale

Code du widget:

class My_Widget extends WP_Widget {
    function My_Widget() {
        $widget_ops = array(
            'classname' => 'my_widget',
            'description' => 'Add the latest post from My Blog to your sidebar.'
        );

        $this->WP_Widget( false, 'My Widget', $widget_ops );
    }

    function widget( $args, $instance ) {
        extract( $args );

        // Get the feed
        $feed = fetch_feed( "http://myblog.com&feed=rss2" );
        $post = array();

        if( is_wp_error( $feed ) )
            return;

        $latest = $feed->get_item();

        $post = array(
            'title' => esc_attr(strip_tags($latest->get_title())),
            'excerpt' => str_replace( array("\n", "\r"), ' ', esc_attr( strip_tags( @html_entity_decode( $latest->get_description(), ENT_QUOTES, get_option('blog_charset') ) ) ) ),
            'content' => str_replace( array("\n", "\r"), ' ', $latest->get_content() ),
            'link' => esc_url(strip_tags($latest->get_link()))
        );

        echo $before_widget;
        echo '<div class="inside">';
        echo '<div class="overflow">';
        echo '<span class="top"></span>';
        echo '<h2><a href="' . $post['link'] . '">' . $post['title'] . '</a></h2>';
        echo '<p>' . $post['content'] . '</p>';
        echo '<p class="credit">Powered by <a href="http://myblog.com">MyBlog.com</a></p>';
        echo '<span class="bottom"></span>';
        echo '</div>';
        echo '</div>';
        echo $after_widget;
    }
}

L’avantage ici est que fetch_feed() mettra le flux en cache avec un transitoire. Par conséquent, je ne frappe pas le site distant à chaque chargement de page. C'est rapide, efficace et assez facile à faire. Le plugin que j'ai lié à ci-dessus tire le dernier message d'un site qui propose des méditations spirituelles quotidiennes, et je republie la dernière méditation sur mon propre site.

Vous pouvez le voir en action dans l'encadré de l'un de mes blogs, Christianisme fondé .

0
EAMann