0

私は 1 つのバディ プレス テーマに取り組んでおり、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

There are several steps, that you need to do: 1) Place element which contain unread message count. This should be adde to your template.

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

2) Add javascript code which will update your count value.You can add this to your template or you can print it from 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) Register ajax request handler. You should add this lines into your functions.php theme file

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');

Something like that.

于 2012-02-24T14:29:19.230 に答える
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 に答える