2016-07-24 11 views
0

私はWordpressでテキストファイルを使用して簡単なヒットカウンタのショートコードを書いていますが、何とかファイル書き込みプロセスを何度かトリガしていることがわかりました。ファイルをWordpressショートコードで複数回書くことはできますか?

function sc_page_counter() { 
    $fname = get_stylesheet_directory() . "/counter.txt"; 

    if (!file_exists($fname)) { 
     file_put_contents($fname, "0"); 
    } 

    $ct = file_get_contents($fname); 
    file_put_contents($fname, ++$ct); 

    return $ct; 
} 
add_shortcode('page_counter', 'sc_page_counter'); 

私は私のfooter.phpに

This site has been visited <?php echo do_shortcode('[page_counter]') ?> times. 

をショートコールを入れているのは、counter.txtの現在の内容が20ショートが正しく出力「21」しますが、カウンタをチェックする時にあるとしましょう.txtファイル。今は「25」です。結果は、ローカルで実行しているかプロダクションサーバーで実行しているかによって異なります。

新しい値を書き込むのではなく、文字を追加するだけで、それをさらに試してみました。約32回追加しました。私は現在、なぜこれが起こっているのかを知りません。

+0

は、あなたが任意のページ/ポストでそれを追加してみてくださいました? – Rizwan

+0

いいえ、フッター領域でのみ呼び出されます。私はしようとしましたし、短くはなかったので、関数だけを呼び出しましたが、それは同じことをやっています。 –

答えて

0

まず、ショートコードを使用しないでください。次に、データベースに書き込みます。

サイトビュー:あなたのテーマの

functions.php

function header_stuff() 
{ 
    $site_views = get_option('site_views'); 
    update_option('site_views', (((preg_match('#^\d+$#', $site_views)) ? $site_views : 0) + 1)); 
} 
add_action('wp_head', 'header_stuff'); 

footer.php

This site has been visited <?php echo get_option('site_views') ?> times. 

それとも、あなたはあなたができる、単一のポスト/ページページのビューを見たい場合以下を使用してください:

functions.php私たちのテーマ:あなたがそれを必要

function header_stuff() 
{ 
    global $post; 
    if (is_object($post) && is_singular()) 
    { 
     $post_views = get_post_meta($post->ID, '_views', true); 
     update_post_meta($post->ID, '_views', (((preg_match('#^\d+$#', $post_views)) ? $post_views : 0) + 1)); 
    } 
} 
add_action('wp_head', 'header_stuff'); 

出力:

if (is_object($post) && is_singular()) 
{ 
    echo 'Views: ' . get_post_meta($post->ID, '_views', true); 
} 

それとも、ということが必要な場合は、あなたがそれらの両方を数えることができます。

function header_stuff() 
{ 
    //Site view 
    $site_views = get_option('site_views'); 
    update_option('site_views', (((preg_match('#^\d+$#', $site_views)) ? $site_views : 0) + 1)); 

    //Post view 
    global $post; 
    if (is_object($post) && is_singular()) 
    { 
     $post_views = get_post_meta($post->ID, '_views', true); 
     update_post_meta($post->ID, '_views', (((preg_match('#^\d+$#', $post_views)) ? $post_views : 0) + 1)); 
    } 
} 
add_action('wp_head', 'header_stuff'); 
+0

より良い方法をありがとうございます。しかし、この方法でも更新メソッドが複数回トリガされました。私は今、なぜアップデートが1回以上トリガするのか非常に混乱しています。 プラグインを無効にしている可能性があるかどうかを確認しています。 –

+0

@EddryanAranzans、 'wp_head'が複数回呼び出されない限り、複数の更新は単に起こり得ません。 pastebinの結果コードを共有できますか? –

+0

http://pastebin.com/0249WCRVしかし、私はそれが何度も発砲している理由を見つけたようです。追加のトリガーを引き起こしている不足している資産がロードされています。私は参照を削除し、今は正しく動作しています。どうもありがとうございます! –

関連する問題