0

目に見えない div 要素のクリックを登録するために、いくつかのコードをハッキングしています。これにより、記事が展開されて抜粋であることが明らかになり、誰かがクリックした回数に +1 が追加されます。その後、受け取ったクリック数で要素を ajax で更新します。

少なくとも、それが目標です。

次のコードは最終的にWordpressを壊し、運命の白い画面を私に与えます. これは、数値を更新するための Ajax コールバックを使用した単純なクリック カウンターから取得されます。

私の問題は、これをハッキングして、別の要素のクリックを登録することです。

誰の時間を無駄にすることなく、ここに私の質問があります:

すべての名前を に変更するだけでよいのではないでしょうpost_likepost_reader? 誰かが私に直接言っているshould work so check your serverが、それはばかげている.

post_readerが表示されている場所の下に、以前に記載されていることに注意してくださいpost_like

// post click to expand button

$timebeforerevote = 1;

add_action('wp_ajax_nopriv_post-like', 'post_reader');
add_action('wp_ajax_post-like', 'post_reader');

wp_localize_script('like_post', 'ajax_var', array(
    'url' => admin_url('admin-ajax.php'),
    'nonce' => wp_create_nonce('ajax-nonce')
));

function post_like()
{
    $nonce = $_POST['nonce'];

    if ( ! wp_verify_nonce( $nonce, 'ajax-nonce' ) )
        die ( 'Busted!');

    if(isset($_POST['post_reader']))
    {
        $ip = $_SERVER['REMOTE_ADDR'];
        $post_id = $_POST['post_id'];

        $meta_IP = get_post_meta($post_id, "voted_IP");

        $voted_IP = $meta_IP[0];
        if(!is_array($voted_IP))
            $voted_IP = array();

        $meta_count = get_post_meta($post_id, "votes_count", true);

        if(!hasAlreadyVoted($post_id))
        {
            $voted_IP[$ip] = time();

            update_post_meta($post_id, "voted_IP", $voted_IP);
            update_post_meta($post_id, "votes_count", ++$meta_count);

            echo $meta_count;
        }
        else
            echo "already";
    }
    exit;
}

function hasAlreadyVoted($post_id)
{
    global $timebeforerevote;

    $meta_IP = get_post_meta($post_id, "voted_IP");
    $voted_IP = $meta_IP[0];
    if(!is_array($voted_IP))
        $voted_IP = array();
    $ip = $_SERVER['REMOTE_ADDR'];

    if(in_array($ip, array_keys($voted_IP)))
    {
        $time = $voted_IP[$ip];
        $now = time();

        if(round(($now - $time) / 60) > $timebeforerevote)
            return false;

        return true;
    }

    return false;
}

function getPostReadLink($post_id)
{
    $themename = "toolbox";

    $vote_count = get_post_meta($post_id, "votes_count", true);

    $output = '<div class="post-read">';
    if(hasAlreadyVoted($post_id))
        $output .= ' <span title="'.__('I like this article', $themename).'" class="qtip like alreadyvoted"></span>';
    else
        $output .= '<a href="#" data-post_id="'.$post_id.'">
                    <span  title="'.__('I like this article', $themename).'"class="qtip like"></span>
                </a>';
    $output .= '<span class="count">'.$vote_count.'</span></div>';

    return $output;
}

クリック時に呼び出される関数:

jQuery(".expand").click(function(e){

    e.preventDefault();

    readers = jQuery(this);

    // Retrieve post ID from data attribute
    post_id = readers.data("post_id");

    // Ajax call
    jQuery.ajax({
        type: "post",
        url: ajax_var.url,
        data: "action=post-reader&nonce="+ajax_var.nonce+"&post_reader=&post_id="+post_id,
        success: function(count){
            // If vote successful
            if(count != "already")
            {
                heart.addClass("readered");
                heart.siblings(".count").text(count);
            }
        }
    });

    return false;
})

適切な div 内で呼び出します。

<?php echo getPostReadLink(get_the_ID());?>
4

0 に答える 0