0

我正在研究一个好友新闻主题,并希望通过 ajax 显示未读消息数。

我在我的主题的function.php中有以下代码

<?php
function addMessageRefresh()
    {
    ?>
<script type="text/javascript">
    function getMessages(){
    jQuery('#user-messages span').text("Unread Messages: (<?php echo messages_get_unread_count(); ?>)");
     }
   setInterval("getMessages()", 10000);
</script>
    <?php
    }
add_action( 'wp_head', 'addMessageRefresh');
?>

有效。

但它仅在页面加载时显示未读计数,但如果用户收到任何消息,则此消息不会更新。

这个脚本的主要目的是显示未读消息的总数,它应该通过 ajax 更新意味着如果用户收到任何消息,它应该在不重新加载页面的情况下显示未读消息的总数。

谢谢

4

3 回答 3

1

不知怎的。。

function getMessages(){
    jQuery.ajax({
        url: '../url.php'
        dataType: 'html',
        success: function (data) {
        jQuery('#user-messages span').text("Unread Messages: " + data);
    }}
    )
}

../url.php 代码

<?php echo messages_get_unread_count(); ?>
于 2012-02-24T11:15:25.540 回答
0

您的问题在于:

jQuery('#user-messages span').text("Unread Messages: (<?php echo messages_get_unread_count(); ?>)");

正在做的是当页面被加载时 PHP 处理messages_get_unread_count()函数并使用该值来呈现页面。从那里生成的 JavaScript 将在您的时间间隔被调用,但它将在您的预处理标记中定义一个静态值。

您将需要对将返回您的消息计数的 url 进行 AJAX 调用。

这是允许您获取更新的消息计数的功能。

function add_message_count_js() {
    ?>
    <script type="text/javascript">
        //<![CDATA[
        var msg_count;
        function updateMessages() {
            jQuery.ajax({
                type: 'POST',
                url: '<?php echo admin_url('admin-ajax.php'); ?>',
                data: {"action": "view_message_count"},
                success: function(data) {
                    jQuery('#user-messages span').text("Unread Messages: "+data);
                }
            });
            return false;
        }
        setInterval('updateMessages()', 10000);
        //]]>
    </script>
    <?php
}
add_action('wp_head', 'add_message_count_js');

这将添加适当的 AJAX 挂钩。

add_action('wp_ajax_view_message_count', 'view_message_count');
add_action('wp_ajax_nopriv_view_message_count', 'view_message_count');
function view_message_count() {
    if (is_user_logged_in())
        echo messages_get_unread_count();

    die();
}

这两个片段都应该放在您的 functions.php 文件中。

于 2012-02-27T04:08:14.533 回答
0

您需要执行以下几个步骤:1)放置包含未读消息计数的元素。这应该添加到您的模板中。

<div id="unread_messages"></div>

2)添加将更新您的计数值的javascript代码。您可以将其添加到您的模板中,也可以从wp_head/wp_footer hooks打印它

<script type="text/javascript">
  function update_unread_count() {
    jQuery('#unread_messages').load(
      '<?php echo admin_url('admin-ajax.php'); ?>', 
      { 'action': 'get_unread_message_count' } 
    );
  }

  jQuery(document).ready(function() {
    // update every 15 seconds, after page loaded
    setInterval('update_unread_count()', 15000); 
  });
</script>

3)注册ajax请求处理程序。您应该将此行添加到您的 functions.php 主题文件中

function my_get_unread_message_count() {
  echo messages_get_unread_count();
  die();
}
add_action('wp_ajax_get_unread_message_count', 'my_get_unread_message_count');

类似的东西。

于 2012-02-24T14:29:19.230 回答