如何在没有页面刷新的情况下在多个块元素中显示WordPress发布内容

时间:2013-05-23 02:30:47

标签: javascript wordpress post

我要发一个小提琴,因为它更容易解释。

http://jsfiddle.net/EhNKM/84/

$("#focus a").mouseenter(
    function(){
        this.style.color = '#cc0000';
        $('<p>content from post that the hovered-over link points to.</p>').replaceAll('#child p');
    }
);

如何访问该帖子内容链接所引用的帖子信息?我想使用该信息将该帖子内容加载到另一个div中,但我不知道从哪里开始(我可以使用什么WordPress PHP?JS?)。任何事情,甚至因为愚蠢而尖叫我都会有所帮助!

澄清小提琴中发生的事情,

  1. 一旦用户将鼠标悬停在某个链接(另一个帖子)上,子div就会加载链接到帖子内容。
  2. 不要担心.click()事件。我确信解决上述问题会对此有所了解。
  3. 谢谢!

    编辑: 我也相信我应该使用

    this.getAttribute('href')
    

    获取链接到帖子,但我不确定在获得引用后我应该(或可以!)使用什么wp函数来获取该帖子的内容。

1 个答案:

答案 0 :(得分:2)

您可以使用jQuery ajax执行此操作,并按照我的说明一步一步完成。

1. 在主题文件夹js中创建一个文件夹,假设您的主题文件夹是二十一页,那么它应该是

http://yourDomain.com/wp-content/themes/twentytwelve/js

2。js folder中创建一个文件,并将其命名为myScript.js

3。functions.php文件中添加

add_action('wp_enqueue_scripts','my_theme_scripts_function');
function my_theme_scripts_function() {
    wp_enqueue_script('myScriptHandler', get_stylesheet_directory_uri() . '/js/myScript.js');
    wp_localize_script( 'myScriptHandler', 'myAjax', array( 'ajaxUrl' => admin_url( 'admin-ajax.php' ) ) );
}

4. 。在functions.php

中添加以下代码
function do_myAjaxFunction()
{
    $post_id = url_to_postid($_POST['post_url']);
    $post = get_post( $post_id, OBJECT);
    $response = apply_filters( 'the_content', $post->post_content );
    echo $response;
    die();
}
add_action( 'wp_ajax_nopriv_myAjaxHandler', 'do_myAjaxFunction' );  
add_action( 'wp_ajax_myAjaxHandler', 'do_myAjaxFunction' );

5. 现在在myScript.js文件中添加以下代码

$('.your_post-entry a').click(function(e){
    e.preventDefault();
    var currentUrl = $(this).attr('href');
    $.ajax({
        type : 'post',
        url : myAjax.ajaxUrl,  
        data: {
            action: 'myAjaxHandler',  
            post_url: currentUrl  
        },
        success: function(data){
            $('#ajax_post').html(data);
        }
    });
});

将上面的代码放在jQuery(function($){...});函数(jQuery的ready事件)中。它完成了!现在,您可以使用ajax获取帖子内容。


说明:

当你点击元素中的任何链接(假设一个div),类名your_post-entry时,点击事件将触发(你知道)并且它会向{{1}发送一个帖子请求因为http://yourDomain.com/wp-admin/admin-ajax.php包含myAjax.ajaxUrl,而我们的脚本(myAjax对象)通过我们url中的wp_localize_script可用。 functions.php请求还会向ajax数组发送一些变量,其中$_POSTactionpost_url包含post_url帖子和permalink将运行我们的admin-ajax.php,它会获取帖子的内容并将其发送回浏览器,因为我们使用do_myAjaxFunction添加了操作,告诉{{1}每当您收到add_action( 'wp_ajax_myAjaxHandler', 'do_myAjaxFunction' )操作的ajax请求时,请运行WordPree函数。第一个myAjaxHandlerdo_myAjaxFunction,即使用户未在wordpress后端登录,也需要使ajax请求正常工作,如果用户没有add_action ajax请求将无效尚未登录。请注意wp_ajax_nopriv_myAjaxHandler回调中的wp_ajax_nopriv_myAjaxHandler行,它会将返回的数据插入$('#ajax_post').html(data); success element/div,因此,请确保在点击事件中使用适当的idajax_post名称。

如果您不想对每个帖子使用id,那么您可以为要使用ajax的class添加/生成ajax,例如class 1}}在点击事件中你可以使用

post links

现在您知道如何做到这一点,所以如果您需要这样做,我认为您可以使用ajaxPost而不是$('.your_post-entry a.ajaxPost').click(function(e){ ... }); 来执行此操作(您举了一个mouseenter示例)。

一些有用的链接: wp_ajax_how-to-use-ajax-in-wordpress