2016-07-24 1 views
0

나는 Wordpress에서 간단한 히트 카운터 shortcode를 텍스트 파일을 사용하여 작성했으며, 어떻게 든 파일 쓰기 프로세스를 여러 번 트리거한다는 것을 알았습니다.파일을 Wordpress shortcode에서 여러 번 쓰기가 가능합니까?

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

먼저 shortcode를 사용하지 마십시오. 둘째, 데이터베이스에 씁니다.

사이트 조회수 : 테마의

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 of y 우리 테마 :

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

더 좋은 방법을 찾아 주셔서 감사합니다. 그러나이 방법조차도 업데이트 방법을 여러 번 트리거했습니다. 지금은 왜 업데이트가 두 번 이상 트리거되는지 매우 혼란 스럽습니다. 플러그인을 사용하지 않았는지 확인하기 위해 플러그인을 사용 중지했습니다. –

+0

@EddryanAranzans,'wp_head'가 여러 번 호출되지 않으면, 여러 번의 업데이트가 일어나지 않습니다. pastebin에 결과 코드를 공유 할 수 있습니까? –

+0

http://pastebin.com/0249WCRV하지만 그것이 여러 번 발사되는 이유를 찾은 것 같습니다. 로드 중 자산이 누락되어 추가 트리거가 발생했습니다. 참조를 제거했는데 이제는 제대로 작동합니다. 대단히 고마워! –

관련 문제