Yazar sayfasında online durumunu gösterme – WordPress

Yükleniyor

Wordpress user online

WordPress’i sadece “bloglamak” için kullanmayan birçok insandan biri olarak, sürekli olarak kendimi “x’i WordPress’te nasıl yapabilirim?” sorusuyla karşı karşıya buluyorum. Son olarak giriştiğim proje olan WP Sözlük‘te de, WordPress ile sözlük konseptli bir topluluk sitesi oluşturmaya çalışıyordum. Tabii haliyle yazar sayfalarında kullanıcının çevrimiçi olup olmadığını gösterme ihtiyacı duydum.

Problem

WP Sözlük tamamlandığında bir topluluk sitesi olacak. Kullanıcıların WordPress ile ilgili detaylı bilgiler, örnekler paylaştığı; sorular sorup cevap alabileceği bir sistem üzerinde çalışıyoruz. Site içi mesajlaşma gibi özelliklerden de dolayı yazarların sitede aktif olup olmadığını gösterme ihtiyacı duyduk.

Çözüm

Böyle bir ihtiyaç için normalde ilk olarak aklımıza “session kullanalım olsun bitsin” gelirdi. Ancak sözkonusu WordPress olunca işler kolaylaşıyor.

Bu problemi çözmek için WordPress’in Transients API‘sini kullandık. WordPress Transient’i şu şekilde açıklıyor:

WordPress Transients API offers a simple and standardized way of storing cached data in the database temporarily by giving it a custom name and a timeframe after which it will expire and be deleted.

Türkçeye şu şekilde çevirebiliriz:

WordPress Transients API’si belirli bir süre için önbelleklenmiş verinin basit ve standartlaştırılmış şekilde veritabanında tutulmasını ve belirtilen süre sonunda bu verinin otomatik olarak silinmesini sağlar.

Biz de son 15 dakikada site üzerinde gezinen kullanıcıları bir transient (Türkçede “fani” anlamına geliyor) ile 15 dakikalığına kaydederek bu sorunun hakkından geldik. Transient’in süresi bitmediyse kullanıcı online (son 15 dakikada sitede işlem yapmış), transient’in süresi bittiyse kullanıcıyı offline olarak gösterebildik.

Gelelim kodlara

functions.php:

/**
 * Bir kişinin online sayılabilmesi için son işlemini kaç saniye öncesi yapması gerek?
 */
define ( 'ONLINE_EXPIRE', 15 * 60 ); // 15 dakika.

/**
 * Kullanıcı ID'si verilen kullanıcının online olup olmadığını
 * sorgular.
 * 
 * @param int $user_id Online olup olmadığına bakılacak kullanıcı ID'si
 * @return boolean Online ise true, aksi halde false döndürür.
 */
function is_user_online( $user_id ) {

  // online kullanıcıların listesini al.
  $logged_in_users = get_transient( 'users_online' );

  // Eğer kullanıcı listedeyse ve son işlemi 15 dakikadan önceyse online, değilse offline'dır.
  return isset( $logged_in_users[$user_id] ) && ( $logged_in_users[$user_id] > ( current_time( 'timestamp' ) - ( ONLINE_EXPIRE ) ) );
}

author.php:

<?php 
$curauth = ( isset( $_GET['author_name'] ) ) ? get_user_by( 'slug', $author_name ) : get_userdata( intval( $author ) );
?>
<h1 id="title">
    <a href="<?php the_permalink(); ?>">
        <?php echo $curauth->nickname; ?>
    </a>
    <div class="online-status">
        <?php if( is_user_online( get_query_var( "author" ) ) ) { ?>
            <span id="user-online" title="bu kullanıcı şu sıralar online.">online</span>
        <?php } else { ?>
            <span id="user-offline" title="bu kullanıcı şu an offline.">offline</span>
        <?php } ?>
    </div>
</h1>

ve biraz stil katalım.
style.css:

div.online-status {
    display: inline;
    font-size: 50%;
    font-weight: normal;
    vertical-align: 25%
}
div.online-status span {
    padding: 1px 5px;
}
span#user-online {
    background: #298cba; 
    color: #e0e0e0; 
    text-shadow: 1px 1px #666; 
}
span#user-offline {
    background: #909090;
    color: #f3f3f3;
    text-shadow: 1px 1px #333;
}

Ve Sonuç

WordPress kullanıcı online
kullanıcı offline

Kapanış

WordPress, geliştiriciler için oldukça büyük imkanlar sunuyor. Yeter ki araştırmasını bilelim. Yeteri kadar İngilizce biliyorsanız WordPress Codex’ten birçok faydalı fonksiyon ve sınıfın temellerini öğrenebilir, Stack Overflow’da ya da tamamlandığında İlgili

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir