点击作者姓名时,在lightbox中显示作者信息和作者的最新帖子

时间:2013-04-05 作者:MidhuN

我正在展示details of all the authors including the avator, Name, Description in my blog. 当我点击OPTIONS TO CONNECT 链接alightbox 将打开,我需要show those details(which I mentioned above) inside the lightbox including the title of the latest post by the author. 有什么办法吗?下面是我用来显示所有作者列表的代码。

<div id="bloggers">
<ul id="foo2">
<?php
    $authors = get_users(\'role=author&orderby=post_count&order=DESC\');
    foreach($authors as $author) {
        echo "<li id=\\"blogger_main\\" style=\\"float:left\\">";
        echo "<a href=\\"".get_bloginfo(\'url\')."/?author=";
        echo $author->ID;
        echo "\\" id=\\"bloggers_image\\">";
        echo get_avatar($author->ID);
        echo "</a>";
        echo \'<div>\';
        echo "<a href=\\"".get_bloginfo(\'url\')."/?author=";
        echo $author->ID;
        echo "\\" id=\\"blogger_name\\">";
        echo the_author_meta(\'display_name\', $author->ID);
        echo "</a>";
        echo "</div>";
        echo "<div id=\\"auth_desc\\">";
        echo the_author_meta(\'description\', $author->ID);
        echo "</div>";
        echo "<div id=\\"options_to_connect\\">";
        echo "<a class=\\"lbp-inline-link-1 cboxElement\\" href=\\"#\\">";
        echo "Options To Connect";
        echo "</a>";
        echo "</div>";
        echo "</li>";
    }?>
</ul>
</div>

Update:

我尝试了以下方法

jQuery(document).ready(function (){
 jQuery(\'#options_to_connect a\').on(\'click\',function(event){         
event.preventDefault();
var author_id = jQuery(this).parent().attr(\'class\'); 
jQuery.ajax({  
type: "POST",                  
url:  \'http://www.myblog.com/wp-admin/admin-ajax.php\',  
   data: \'action=ajaxified_function&post_id=\'+author_id,    
   success: function (msg) {                                        
  jQuery(\'#cboxLoadedContent\').html(msg);
},
error: function () {                  
  alert(\'Error\');               
}  
});           
});       
});      
这就是函数。php

 add_action( \'wp_ajax_ajaxified_function\', \'ajaxified_function\' );
 add_action( \'wp_ajax_nopriv_ajaxified_function\', \'ajaxified_function\' );
 function ajaxified_function() 
{ 
    $author = get_the_author_meta($_POST[\'author_id\']);
    $auth_name = the_author_meta(\'display_name\', $author->ID);
    $avatar= get_avatar($author->ID);
    $desc = the_author_meta(\'description\', $author->ID);
    echo \'<div id="bloggers_title">\'.$auth_name.\'</div>
            <div id="bloggers_avatar">\'.$avatar.\'</div>
            <div id="bloggers_desc">\'.$desc.\'</div>\';
  die();

}
但这只显示了一张看不清楚的图像。请告诉我哪里做错了。希望我的问题清楚。提前感谢您的帮助。

Update:

我使用下面的脚本来注册js,不知道为什么它不应用。即使注册了,代码也不起作用。。。

wp_register_script(\'lightbox\',get_template_directory_uri() . \'/js/lightbox.js\',
                       array(   \'jquery\', \'wp-ajax-response\' ) );
wp_enqueue_script( \'lightbox\');
wp_localize_script( \'lightbox\', \'ajaxurl\', 
                array( 
                    \'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
                )
        );
早上工作得很好。。但过了一段时间后,我不知道为什么它会坠毁,而且无法在远处工作。。

这是控制台中显示的内容

<script type="text/javascript">
/* <![CDATA[ */
var wpAjax = {"noPerm":"You do not have permission to do that.","broken":"An unidentified error has occurred."};
/* ]]> */
</script>
谁来帮帮我

1 个回复
最合适的回答,由SO网友:Sunyatasattva 整理而成

您将希望使用AJAX实现这一点。阅读Codex中的这两篇文章,了解有关将Wordpress与一些AJAX操作集成的更多信息:

为了给你一个先发制人的机会,你会想要这样的东西:

客户端(Javascript)

$(element).click(function() { 

    var data = {
        action:    \'get_author_info\',
        author_id:  your-author-id
    };

    $.post(ajaxurl, data, function(response) {
        var res = wpAjax.parseAjaxResponse(response, \'ajax-response\');

            $.each( res.responses, function() { 
                if (this.what == \'has\') {                                
                    $(your-lightbox).html( this.data );    
                } else {
                    // Some error/no result handling
                }
            });

    });
将单击处理程序绑定到author元素,传递一些数据:传递action 部分数据。其他一切都取决于您,也许您需要通过一些jQuery.data() 例如

然后您发布到ajaxurl.

Note 如果您在管理端使用此脚本,则自WP 2.8ajaxurl 总是定义的,如果没有定义,则必须定义它。在任何情况下,您都应该通过admin-ajax.php.

收到响应后,解析它并用服务器端处理的数据填充lightbox HTML。

插件中的服务器端functions.php:

 add_action(\'wp_ajax_nopriv_get_author_info\', \'my_get_author_info\');
 add_action(\'wp_ajax_get_author_info\', \'my_get_author_info\');

function my_get_author_info(){
    $response = new WP_Ajax_Response();

        // Insert here everything you want to do to retrieve your
        // authors data, perhaps even process already the HTML
        // in some sort of template, using output buffer, or string
        // concatenation, or whatever.
        //
        // Then you will store it into a variable that we will call
        // $output, for convenience.

        $success_response->add(array(
        \'what\' => \'has\',
        \'data\' => $output
    ));
    }
    $success_response->send();      
  }
使用add_action 将您的callback 功能到wp_ajaxwp_ajax_nopriv (基本上不同的是,一个只有在登录时才能工作,另一个不登录时才能工作)。

Note 绑定在AJAX数据中定义的操作名称!

定义callback 函数和,使用WP_Ajax_Response 您可以将所需的所有数据发送回AJAX请求。

基本上,这就是让它工作所需的全部。也许您需要实现一些nonces、 或check_ajax_referer() 但在这一点上,你必须做更多的研究。

更新我查看了您的函数,并且可以看到一些可能导致错误的东西。例如,您在AJAX请求中发布post_id 然后在函数中检查$_POST[\'author_id\'].

此外,在您使用的函数中the_author_meta (与结果相呼应)而不是get_the_author_meta (其中returns 它)填充变量。

我没有检查这些函数中的所有错误,而是用我在原始答案中给你的建议重写了它们,它工作得非常完美。让我解释一下:

Javascript

$(\'#options_to_connect a\').on(\'click\', function (e){         

    e.preventDefault();

    var data = {
        action:    \'ajaxified_function\',
        author_id:  1
    };

    $.post(ajaxurl, data, function (response) {
        var res = wpAjax.parseAjaxResponse(response, \'ajax-response\');

        $.each( res.responses, function() { 
            if (this.what == \'has\') {                                
                $(\'#cboxLoadedContent\').html( this.data );    
            } else {
                console.error(\'Error\'); 
            }
            });
    });
});
这里没有什么太花哨的东西,但是比您使用的代码更干净一些。我把data 在一个漂亮整洁的对象中,我还使用ajaxurl 变量,而不是对URL进行硬编码。正如我之前所说,如果您在管理端使用脚本,那么您已经有了ajaxurl 可用,如果不可用,请通过wp_localize_script 使用admin_url(\'admin-ajax.php\').

然后使用WPAjax 解析响应。要小心,为了使用它,您必须排队wp-ajax-response 在您的functions.php.

PHP

add_action( \'wp_ajax_ajaxified_function\', \'ajaxified_function\' );
add_action( \'wp_ajax_nopriv_ajaxified_function\', \'ajaxified_function\' );
function ajaxified_function() 
{ 
    $response = new WP_Ajax_Response();

    $id        = $_POST[\'author_id\'];
    $auth_name = get_the_author_meta(\'display_name\', $id);
    $avatar    = get_avatar($id);
    $desc      = get_the_author_meta(\'description\', $id);

    $output = "<div id=\'bloggers_title\'>$auth_name</div>\\n
               <div id=\'bloggers_avatar\'>$avatar</div>\\n
               <div id=\'bloggers_desc\'>$desc</div>";


    $response->add(array(
        \'what\' => \'has\',
        \'data\' => $output
    )); 

    $response->send();   

}
这里也没有什么新奇或不同于我在旧答案中所说的内容,只是根据你的情况进行了调整。使用WP_Ajax_Response 处理这件事很容易。

记住使用get_ 函数的版本!这样您就可以返回所需的数据。

此外send() 方法die()因此,您不必做任何其他事情来确保正确的AJAX响应。

结束

相关推荐

强制将jQuery加载到头部

我写了一个插件,它使用wp_enqueue_script(\"jquery\"); 加载jQuery。我需要在头部而不是身体底部加载jQuery。然而,我认为这个命令被某个主题覆盖了,该主题在正文的底部加载jQuery,因此阻止了我的插件正常工作。如何强制WP在头部加载jQuery?