Charger le contenu Wordpress post dans DIV en utilisant AJAX

j'ai posté une question il y a quelques jours sur la façon de faire défiler en Single Post dans un template Wordpress personnalisé que je suis en train de développer. Ce que j'ai besoin dans la coque de noix est de charger un seul poteau dans un DIV défini quand un lien particulier est cliqué et puis faire défiler vers le bas à cette DIV contenant le contenu nouvellement chargé. Compte tenu de la nature de contenu dynamique de Wordpress ou celle de tout autre CMS, L'URL de ce lien ne peut pas être un absolu.

Malheureusement, il n'y avait pas de réponse concrète à ce moment-là, alors j'ai décidé de fouiner un peu. Et puisque le principal problème était de charger le contenu de manière dynamique, je décide de zoomer sur comment je peux le faire avec AJAX sur Wordpress:

Jusqu'à présent, j'ai eu une petite idée d'un grand post ( chargement des postes WordPress avec Ajax et jQuery ) par Emanuele Feronato. Il stocke essentiellement le post ID dans l'attribut rel du cliquable lien et ensuite l'appelle. Eh bien, il y a quelques autres étapes pour faire ce travail, mais la raison pour laquelle je ne parle que de l'ID de poste en ce moment est parce qu'il semble que c'est la seule partie de l'équation qui n'est pas correcte; L'ID de poste charge dans l'attribut rel du lien mais ne parvient pas à charger dans le .la fonction de charge.

Juste pour vous donner une meilleure idée de ce que j'ai obtenu dans mon balisage jusqu'à présent:

THE AJAX/JQUERY IN HEADER.PHP

$(document).ready(function(){

    $.ajaxSetup({cache:false});
    $(".trick").click(function(){
        var post_id = $(this).attr("rel");
        $("#single-home-container").html("loading...");
        $("#single-home-container").load("http://<?php echo $_SERVER[HTTP_HOST]; ?>/single-home/",{id:post_id});
    return false;
    });

});

INDEX.PHP

<?php get_header();?>

<!--home-->
<div id="home">

<!--home-bg-->
<img class="home-bg" src="<?php bloginfo('template_url');?>/images/home-bg.jpg" />
<!--home-bg-->

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>

    <a class="trick" rel="<?php the_ID(); ?>" href="<?php the_permalink();?>">

        <div class="box element col<?php echo rand(2,4); ?>" id="<?php $category = get_the_category(); echo $category[0]->cat_name; ?>">               

            <?php the_post_thumbnail(); ?>

            <span class="title"><?php the_title(); ?></span>    

            <span class="ex"><?php the_excerpt(); ?></span>

        </div>

    </a>

    <?php endwhile; endif; ?>

</div>
<!--home-->

<div id="single-home-container"></div>

SINGLE-HOME.PHP (THIS IS A CUSTOM TEMPLATE)

<?php

    /*
    Template Name: single-home
    */

?>    

<?php

    $post = get_post($_POST['id']);

?>

    <!--single-home-->
    <div id="single-home post-<?php the_ID(); ?>">

    <!--single-home-bg-->
    <div class="single-home-bg">

    </div>
    <!--single-home-bg-->

    <?php while (have_posts()) : the_post(); ?>

        <!--sh-image-->
        <div class="sh-image">

            <?php the_post_thumbnail(); ?>

        </div>
        <!--sh-image-->

        <!--sh-post-->
        <div class="sh-post">

            <!--sh-cat-date-->
            <div class="sh-cat-date">

                <?php

                    $category = get_the_category(); 
                    echo $category[0]->cat_name;

                ?>

                - <?php the_time('l, F jS, Y') ?>

            </div>
            <!--sh-cat-date-->

            <!--sh-title-->
            <div class="sh-title">

                <?php the_title();?>

            </div>
            <!--sh-title-->

            <!--sh-excerpt-->
            <div class="sh-excerpt">

                <?php the_excerpt();?>

            </div>
            <!--sh-excerpt-->

            <!--sh-content-->
            <div class="sh-content">

                <?php the_content();?>

            </div>
            <!--sh-content-->

    </div>
    <!--sh-post-->        

    <?php endwhile;?>

    <div class="clearfix"></div>    

    </div>
    <!--single-home-->

juste pour info: quand l'ID du post ne s'est pas chargé, j'ai essayé d'installer ce thème Kubrick utilisé dans la démo D'Emanuele Feronato et j'ai fait les changements nécessaires selon son guide mais rien n'a fonctionné.

quelqu'un a une idée de ce qui va sur ou s'il y a une autre façon de charger dynamiquement le post ID dans le .fonction de chargement?

27
demandé sur Community 2011-09-23 12:16:06

2 réponses

Eh bien, par un coup de chance et un peu de café avec des cigarettes, j'ai réussi à résoudre le problème:

voici ce que j'ai fait:

1. Tester si post ID est capturé dans l'attribut rel et chargé correctement dans la variable post_id

j'ai inséré un appel d'alerte de retour sur le snippet AJAX / JQUERY pour voir si le post ID était en train de charger dans la variable post_id à droite. C'est à quoi il ressemblait:

$(document).ready(function(){

    $.ajaxSetup({cache:false});
    $(".trick").click(function(){
        var post_id = $(this).attr("rel");
        alert(post_id);
        $("#single-home-container").html("loading...");
        $("#single-home-container").load("http://<?php echo $_SERVER[HTTP_HOST]; ?>/single-home/",{id:post_id});
    return false;
    });

});

donc quand j'ai cliqué sur le lien, le rappel a donné L'ID exact de poste associé au poste. Ceci a isolé le problème jusqu'à L'URL définie dans le .fonction load (). Il semble que l'ID de poste n'était tout simplement pas suffisant pour charger le poste dans DIV défini.

2. Changer l'attribut rel de link de post ID à post permalink

j'ai décidé que depuis le post ID a été clairement ne fonctionne pas j'utiliserais plutôt la balise permalink du post dans l'attribut rel du lien. Voici à quoi ressemblait la rel de link:

<a class="trick" rel="<?php the_ID(); ?>" href="<?php the_permalink();?>"></a>

et voilà à quoi ça ressemble maintenant:

<a class="trick" rel="<?php the_permalink ?>" href="<?php the_permalink();?>"></a>

3. Modifier. load () fonction URL / value

suite à partir de là, j'ai dû faire un changement au snippet AJAX / JQUERY pour qu'il n'utilise plus le post ID:

$(document).ready(function(){

        $.ajaxSetup({cache:false});
        $(".trick").click(function(){
            var post_link = $(this).attr("rel");
            $("#single-home-container").html("loading...");
            $("#single-home-container").load(post_link);
        return false;
        });

    });

comme vous pouvez le voir ci-dessus, j'ai pris la valeur de l'attribut rel du lien (qui est maintenant permalink du post) et je l'ai jetée dans la variable post_link. Cela me permet simplement de prendre cette variable et de la placer dans le .fonction load (), remplaçant http://<?php echo $_SERVER[HTTP_HOST]; ?>/single-home/",{id:post_id} qui n'a évidemment pas fonctionné.

voilà! Le problème est résolu.

bien que je n'ai pas encore testé ceci, je crois que l'utilisation du permalink dans ce cas Coupe en fait la nécessité de changer la structure permalink dans Wordpress comme instruit par Emanuele Feronato dans son post .

donc si quelqu'un a l'intention de charger dynamiquement les messages Wordpress dans une DIV définie, vous pouvez probablement essayer cela!

25
répondu vynx 2017-08-01 15:14:30

au lieu d'utiliser:

var post_id = $(this).attr("rel");

vous devez aller chercher directement le href. Ils sont tous les deux la même chose.

var post_id = $(this).attr("href");

cela aide avec 2 choses:

  1. moins de markup dans votre HTML
  2. vous restez à l'écart de l'utilisation de rel comme attribut de données, ce qui n'est pas un choix très sage aujourd'hui avec HTML5. ( lire ici )
7
répondu Cosmin 2012-01-17 23:24:04