サポート » 使い方全般 » Ajax,cache.phpエラー

  • 解決済 dab

    (@dab)


    フルAjaxで作成しています。

    コメントを投稿したとき、該当コメントだけを返して終了するように作っていますが、
    投稿時に以下のようなエラーが出てしまいます。

    add_action(‘comment_post’, ‘myFunction’);
    の形でフックしていますが、
    リファレンスによるとcomment_postはデータベースに保存する直前にフックするということで、
    これが悪さをしているのでしょうか。
    もしそうなら、データベースに保存した直後にフックするAPIか、
    何か別の良い方法はないでしょうか。

    参考に、コードの該当部分(一部編集)です。

    —-function.php

    function myFunction($arg){
        global $myComments;
        if(isset($_REQUEST['ajax'])):
            $q=$_REQUEST['ajax'];
            if($q=='comment'){
            $myComments=$arg;
            include(TEMPLATEPATH .'/lib/comment-post.php');
        }else{
        }
        exit();
        endif;
    }
    
    ----lib/comment-post.php
    
    global $myComments;
    $args=array(ID=>$myComments);
    $comment = get_comment($args);
    if($comment) {
    ?>
    data={
    id:'<?php echo $myComments; ?>',
    name:'<?php echo $comment->comment_author; ?>',
    avatar:'<?php echo get_avatar( $comment, 64 ); ?>',
    script:'<?php echo $comment->comment_content; ?>',
    date:'<?php echo $comment->comment_date; ?>',
    time:'<?php echo $comment->comment_date; ?>'
    };
    <?php
    } //if($comment)
    ?>

    エラー内容:
    <b>Warning</b>: Illegal offset type in isset or empty in <b>/path/wp-includes/cache.php</b> on line <b>352</b>

    <b>Warning</b>: Illegal offset type in isset or empty in <b>/path/wp-includes/cache.php</b> on line <b>360</b>

    <b>Warning</b>: Illegal offset type in <b>/path/wp-includes/cache.php</b> on line <b>363</b>

    厳密にはエラーではないですが、、、
    Warningメッセージの後に、comment-post.phpによるdata={…}が出力されています。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック投稿者 dab

    (@dab)

    その後、いろいろ試していて。
    get_headerにactionをセットし、
    このmyfuncの中でget_comment()を使用すると、先のWarningが出るようです。

    add_action('get_header', 'myfunc');
    
    $args=array(ID=>$id); // $idはコメントID:数値
    $comment= get_comment($args);

    そのほか、wordpressにアクセスした早い段階でwp_new_comment()を使用しても、
    Warningが出るようでした。

    しょうがないので、get_commentのかわりに、

    global $wpdb;
    $comment = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_ID = %d LIMIT 1", $id));

    という、ローレベルで対応して見ましたが、
    バージョン(データベースの設計)に依存かもしれません。。。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「Ajax,cache.phpエラー」には新たに返信することはできません。