WordPress Özel Profil Alanları Oluşturmak

Bu videomda sizlere profil için özel alanlar oluşturmayı ve bu alanları tema içerisinde kullanmayı gösterdim.

Not: Makale boyunca yazacağımız tüm fonksiyonları tema klasörümüz içerisinde functions.php dosyası içerisinde yazıyoruz.

Profil ve kullanıcı düzenleme sayfalarında özel alanların gösterilmesi

Bunun için bir fonksiyon yazmalı ve bu fonksiyonu önceden tanımlı 2 fonksiyona (show_user_profileedit_user_profile) kanca atmalıyız.

function show_extra_profile_fields($user)
{
    ?>
    <h2>Sosyal Hesaplar</h2>

    <table class="form-table">
        <tbody>
        <tr>
            <th>
                <label for="facebook">
                    Facebook Adresi
                </label>
            </th>
            <td>
                <input type="text" id="facebook" name="facebook" value="<?php echo esc_attr(get_the_author_meta('facebook', $user->ID)) ?>" class="regular-text">
            </td>
        </tr>
        <tr>
            <th>
                <label for="twitter">
                    Twitter Adresi
                </label>
            </th>
            <td>
                <input type="text" id="twitter" name="twitter" value="<?php echo esc_attr(get_the_author_meta('twitter', $user->ID)) ?>" class="regular-text">
                <p class="description">
                    Lütfen sadece twitter kullanıcı adınızı yazın!
                </p>
            </td>
        </tr>
        <tr>
            <th>
                <label for="instagram">
                    Instagram Adresi
                </label>
            </th>
            <td>
                <input type="text" id="instagram" name="instagram" value="<?php echo esc_attr(get_the_author_meta('instagram', $user->ID)) ?>" class="regular-text">
            </td>
        </tr>
        </tbody>
    </table>

    <?php
}

add_action('show_user_profile', 'show_extra_profile_fields');
add_action('edit_user_profile', 'show_extra_profile_fields');

esc_attr()
WordPress’in önceden tanımlı güvenlik için kullanılan fonksiyonudur.get_the_author_meta()
Özel alanların değerlerini almamız için kullanılan fonksiyondur. İlk parametre özel alanın ismi, ikinci parametre ise varsa üye id’sidir.

Özel alanların güncellenmesi

Bunun içinde bir fonksiyon yazmalı ve özel alanlarımızı güncellemeliyiz.

function update_extra_profile_fields($user_id)
{
    if (current_user_can('edit_user', $user_id)){
        update_user_meta($user_id, 'facebook', $_POST['facebook']);
        update_user_meta($user_id, 'twitter', $_POST['twitter']);
        update_user_meta($user_id, 'instagram', $_POST['instagram']);
    }
}

add_action('personal_options_update', 'update_extra_profile_fields');
add_action('edit_user_profile_update', 'update_extra_profile_fields');

current_user_can()
Mevcut kullanıcı için izin kontrolü yapan fonksiyondur. Burada edit_user yani bilgilerini düzenleme izninin olup olmadığını kontrol ettik.

Tema içerisinde kullanımı

Bunun için tema klasörümde author-bio.php dosyamı açıyorum. Ve uygun bir kısma, göstermek istediğim özel alanı şu şekilde yazıyorum;

<?php echo get_the_author_meta('facebook');

Burada facebook yerine siz kendi özel alan isminizi yazacaksınız. Benim örneğimde bu facebook, twitter ya da instagram olabilirdi ????

Cloudflare ile Ücretsiz SSL Kullanımı

Bende erbilen.net üzerinde şuan cloudflare’ın ücretsiz SSL hizmetini kullanıyorum. SSL nedir bilmeyenler ayrıca araştırabilirler, bu makalem’de sizlere sitenizi cloudflare’e bağlayarak nasıl SSL sahibi olabileceğinizi göstereceğim.

lk olarak cloudflare.com’a kayıt olup domain ismimizi yazarak scan ediyoruz ve ekleme işlemini tamamlıyoruz. Ekleme işlemini tamamlarken size NS’lerinizi değiştirmek için 2 tane cloudflare NS’i veriyor. Bunları domain’i aldığınız firmaya girerek NS değiştirmeden değiştirin.

NS’leri değiştirdikten sonra, Cloudflare’de  DNS ayarlarını yapmanız gerekiyor. DNS ayarlarında 2 record eklemeniz yeterli, bunlar;

1- A – domainadi.com – IP Adresi
2- A – www – IP Adresi

Yani kısaca ayarlarınız şu şekilde olacak;

Not: Görseldeki CNAME ve MX kayıtları yandex maili kullanmak içindi, onları eklemek zorunda değilsiniz.

Buraya kadar herşeyi yaptıysanız artık NS’lerin yönlenip yönlenmediğine bir bakalım. Bunun için;

http://intodns.com/siteadi.com adresinden bakabilirsiniz. NS’ler cloudflare NS’leri olarak gözüküyor ise, Cloudflare panelindeki Overview kısmından NS kayıtlarını onaylıyorsunuz ve onaylandığında orası artık yeşil kalıyor.

SSL’in aktifleştirilmesi

Cloudflare panelinde Crypto kısmına geliyoruz. Burada SSL alanında select box’dan önce Off sonra Full seçeneğini işaretleyelim. Sol tarafında işlemin süreci yazacak zaten. Ortalama 1-2 saat içerisinde SSL kullanılmak üzere aktifleşiyor. Status Active Certificate yazısını gördüğünüzde artık kullanabilirsiniz demek oluyor.

Buraya kadar tamamsa, aşağıda kaydırıp görseldeki alanı bulup aktif ettiğinizde otomatik olarak artık siteniz https:// adresine yönlenmeye başlayacaktır.

Artık ücretsiz SSL’in keyfini çıkarabilirsiniz ????

WordPress Özel Giriş Sayfası Hazırlamak

Bu dersimde, wordpress için özel giriş sayfası nasıl hazırlanır bundan bahsedeceğim. İşlemler çok kolay ve anlaşılır, anlamadığınız bir yer olursa sormayı unutmayın ????

Özel Sayfa Şablonu Oluşturma

wp-content > themes > tema_klasörü altında bir login.php dosyası oluşturun. Ve içerisine ilk olarak php’de şu açıklama satırlarını yazın;

<?php
/**
 * Template Name: Giriş Sayfası
 */

WordPress admin sayfasında sayfalar kısmından yeni sayfa oluştur deyin. Artık sağ kısımda sayfa şablonu diye bir alan çıktı. Oradan Giriş Sayfası olanı seçip Giriş ismiyle sayfanızı kaydedin.

Giriş Sayfasını Oluşturma

Tekrar tema klasörümüzdeki login.php‘ye dönüyoruz. Şimdi yapmamız gereken şey, temanın header ve footer‘larını yerleştirmek. Ardından giriş formunu wordpress’in wp_login_form() fonksiyonu ile oluşturmak.

<?php
/**
 * Template Name: Giriş Sayfası
 */

get_header();

wp_login_form([
    'redirect' => home_url()
]);

get_footer();

?>

Burada parametre olarak redirect değerine home_url() dedik. Yani anasayfaya gidecek giriş yaptığı zaman kullanıcı. Görüntü şöyle bir şey şuan bende;

İlgili Fonksiyonların Yazılması

Şimdi bazı kurallar ve işlemler için tema klasörünüzde bulunan functions.php dosyasına bazı fonksiyonlar yazacağız. Ve wp’nin fonksiyonlarına kancamızı atacağız.

Giriş Sayfasına Yönlendirme

Kullanıcı eğer doğrudan siteadi.com/wp-login.php sayfasına ulaşmaya çalışıyorsa kullanıcıyı kendi oluşturduğumuz giriş sayfasına yönlendirmemiz gerek.

function redirect_login_page()
{
    $login_page = home_url('giris');
    $param = basename($_SERVER['REQUEST_URI']);
    if ($param == 'wp-login.php' && $_SERVER['REQUEST_METHOD'] == 'GET') {
        wp_redirect($login_page);
        exit;
    }
}

add_action('init', 'redirect_login_page');

Şimdi burada önemli olan basename($_SERVER[‘REQUEST_URI’]) ile wp-login.php kısmını aldık. Ve karşılaştırıyoruz, eğer giriş sayfasında ise özel sayfamıza yönlendirme işlemini yapıyoruz ancak ek bir koşul belirttik. Sadece GET isteği olursa bunu yapıyoruz çünkü kullanıcı adı ve şifremizi yine aynı yere post edeceğiz o zaman çalışmaması gerek bu kodların.

Kullanıcı adı ya da şifre boş ise yönlendirme

Bunun için authenticate fonksiyonuna filtre ekleyeceğiz. Şu şekilde;

function verify_user($user, $username, $password)
{
    $login_page = home_url('giris?islem=bos');
    if ($username == '' || $password == '') {
        wp_redirect($login_page);
        exit;
    }
}

add_filter('authenticate', 'verify_user', 10, 3);

Bu seferde eğer değerler boş ise özel sayfamıza gönderiyoruz ancak ?islem=bos şeklinde. Bunu birazdan tema dosyamızda kontrol edip hataları göstermek için kullanacağız. Bu arada farklılık olarak add_filter() fonksiyonu 4 parametre aldı. 3. parametre öncelik sırası, default’y 10’dur yani işlem önceliğini belirtir önce hangisi çalışmalı gibisinden. 4. parametre ise fonksiyonun kaç parametre aldığıdır.

Kullanıcı adı ya da şifre hatalıysa yönlendirme

Bu işlem içinde wp_login_failed() fonksiyonuna kanca atıyoruz. Hemen görelim;

function login_failed()
{
    $login_page = home_url('giris?islem=basarisiz');
    wp_redirect($login_page);
    exit;
}

add_action('wp_login_failed', 'login_failed');

Burada da yönlendirme işleminde ?islem=basarisiz şeklinde kullandım.

Kullanıcı çıkış yaptığında yönlendirme

Diğerlerini yaptığımız için bunuda yapmak zorundayız. Kullanıcı çıkış yaptığında görüntülediği yere geri dönsün;

function logout_redirect()
{
    $redirect_url = $_SERVER['HTTP_REFERER'];
    wp_redirect($redirect_url);
    exit;
}

add_action('wp_logout', 'logout_redirect');

Kullanıcı giriş yapmışsa yönlendirme

Kullanıcı giriş yaptığında hala giriş sayfasına girmeye çalışıyorsa onu anasayfaya yönlendirmemiz gerek. Bunun içinde;

function redirect_home()
{
    if (is_user_logged_in() && is_page('giris')){
        wp_redirect(home_url());
        exit;
    }
}
add_action('template_redirect', 'redirect_home');

is_page() kısmında oluşturduğumuz sayfanın url’ni belirtmemiz gerek. Başka bir isim verdiyseniz, unutmayın ????

Hataların Gösterilmesi

Şimdi functions.php ile işimiz bitti. Tekrar tema klasörümüzde login.php dosyamızı açıp hatalar için bir switch-case yapısı kuruyoruz.

if (isset($_GET['islem'])){
    Switch ($_GET['islem']){
        case 'bos':
            $serror = 'Lütfen kullanıcı adı ya da şifrenizi yazın.';
            break;
        case 'basarisiz':
            $serror = 'Geçersiz kullanıcı adı ya da şifre girdiniz.';
            break;
    }
}

if (isset($serror)){
    echo $serror;
}

Bundan sonra güzel bir tasarım ile entegre ederek giriş ekranınızı kullanabilirsiniz, güle güle kullanın ???? Daha fazlası için videoya gözatmayı unutmayın.

PHP ile Ayın Kaç Gün Olduğunu Bulma

Bu konuda daha önce JavaScript için şöyle bir yazı yazmıştım. Aynı işlemi PHP’nin takvim fonksiyonları ile kolayca yapmamız mümkün.

İlk olarak, hangi fonksiyonu kullanacağız ve parametreleri neler?

cal_days_in_month(takvim, ay, yıl);

takvim – bunun için tanımlayacağımız belli başlı sabitler var. Örneğin Türkiye’nin şuan kullandığı gregoryen takvimi için CAL_GREGORIAN sabiti kullanılır.

Şimdi bir örnek ile taçlandıralım yazımızı;

$day = cal_days_in_month(CAL_GREGORIAN, 1, 1993);

echo '1993 Ocak ayının ' . $day . ' günü vardır';

PHP goto İfadesi

PHP’de goto ifadesi, bir satırdan diğer satıra atlamak için kullanılıyor. Soyut olarak bir örnek vermek gerekirse;

goto erbilen;

echo 'burası okunmaz herhalde..';

erbilen:
echo 'buraya atladın!';

Bu kod parçacağı çalıştığında ekranda buraya atladın! yazısıyla karşılaşırız. Buda demek oluyor ki goto erbilen; komutundan sonra erbilen: kısmına atlayıp ondan sonrakileri çalıştırdı.

Örneğin bunu bir kontrol sisteminde yapmak istersek;

if (!isset($_SERVER['HTTP_REFERER'])){
    goto control;
}
if (!isset($_SESSION['login'])){
    goto control;
}

// .. kullanıcı giriş yapmışsa yapılacak işlemler vs.

control:
die('Bu sayfayı görüntüleme izniniz yok');

Nerede nasıl kullanılacağı belli olmaz, bir gün mutlaka işimize yarar. Bilmekte fayda var ????

Not: PHP 5.3 ve sonraki sürümünlerinde kullanabilirsiniz.

PHP ile A’dan Z’ye Kadar Yazdırmak

Bazen A’dan Z’ye kadar harfleri yazdırmak gerekiyor. Bu gibi durumlarda, php’de kullanacağımız 1-2 fonksiyon mevcut. Bir for döngüsü ile nasıl yapabileceğimize bakalım.

Öncelikle bu işlem için ord() ve chr() fonksiyonlarını kullanacağız. Peki ne işe yararlar?

ord() Fonksiyonu

İçine girilen karakterin ASCII değerini döndürür. Örn;

echo ord('a'); // Çıktı: 97

chr() Fonksiyonu

Buda tam tersine ASCII değerini karaktere dönüştürür. Örn;

echo chr(97); // Çıktı: a

Şimdi asıl örneğimize geçebiliriz. İngilizce de 26 harf olduğuna göre, for döngüsünde bunu şu şekilde belirteceğiz;

$ascii_val = ord('a');
for($i = $ascii_val; $i < $ascii_val + 26; $i++) {
    echo chr($i) . ' ';
}
// Çıktı: a b c d e f g h i j k l m n o p q r s t u v w x y z

Bu kod 97‘den başlayacak. $i değerini 97‘ye eşitledik. Ve koşul olarak $ideğeri (97 + 26 = 123) değerine gelene kadar $i‘yi 1 artırıyoruz. Yani sırasıyla, 97,98,99,100.. şeklinde giderek for içinde de ASCII değerlerine göre karakterleri döndürerek yazdırma işlemini yapıyoruz.

Diğer alternatif

range() fonksiyonu ile de bu işlemi yapabilirsiniz;

foreach(range('a', 'z') as $c){
    echo $c . ' ';
}

PHP ile HTTP Kimlik Doğrulaması

Bazı zamanlar belli bir adrese erişimde kimlik doğrulaması isteyebiliriz. Yani kullanıcı adı ve şifre yazarak sayfayı görüntülemesini. Ancak her zaman bir üyelik sistemimiz olmayabilir, bundan dolayı kimlik doğrulamanın alternatif bir yolunu sizlerle öğrenelim.

Şimdi ilk olarak geçerli olacak kullanıcı adı ve şifremizi belirleyelim.

$username = 'erbilen';
$password = '123123';

Hemen ardından kullanıcıdan alacağımız kullanıcı adı ve şifremizi değişkenlere aktaralım. Bu arada girilen değerleri almak için superglobal $_SERVER değişkenini kullanacağız.

$inputUsername = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : false;
$inputPassword = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : false;

Burada değişkenin varlık kontrolü için isset kullandık ve if/else yapısı yerine Ternary Operatörü ile işimizi hallettik.

Şimdi basit şekilde mevcut kullanıcı adı ve şifremi, girilen kullanıcı adı ve şifre ile eşleşip eşleşmediğini test edeceğim.

$validated = ($inputUsername == $username) && ($inputPassword == $password);

Sonuç olarak $validated değişkenimin değeri, kullanıcı eğer doğru kullanıcı adı ve şifreyi girmişse true değerini, yanlış ya da hiç girmemişse false değerini döndürecektir.

Buna göre de eğer false değeri dönmüş ise, kimlik doğrulaması için kodlarımızı çalıştıracağız.

if (!$validated) {
    header('WWW-Authenticate: Basic');
    header('HTTP/1.0 401 Unauthorized');
    die('Girmek için yetkiniz bulunmuyor!');
}

die() kısmı, kullanıcı adı ya da şifre girilmezse ya da yanlış girilirse kullanıcıya gözükecek alandır. Şimdi bu kodlarla birlikte sayfayı çalıştırdığımızda, şöyle bir görünüm elde edeceğiz ????

Kullanıcı adı ve şifremizi doğru yazdıktan sonra gözükmesi için if kısmının hemen altına birkaç bir şey yazalım.

Hoşgeldin, <b><?= $username ?> </b>

Artık kullanıcı adı ve şifremizi doğru yazdığımızda üstteki yazı gözükecek ve oturum sonlanana kadar giriş yapmış sayılacaksınız ????

Çıkış İşlemi

Bu işlem session gibi çalışmadığından session_destroy() gibi bir metodu da yok ???? Ancak şöyle bir üst bilgi ile çıkışı sağlayabiliriz;

header('HTTP/1.1 401 Unauthorized');

Yani bunu herhangi bir logout.php gibi dosyaya ekleyip çıkış işlemini oraya yönlendirirsek otomatik olarak çıkış yapmış sayılacaktır.

Sınıf haline getirmek

Hızlı ve kolay kullanım için yukarıdaki kodlarımızı hemen basit bir sınıf haline getirelim.

class Auth {

    public static function Login($username, $password)
    {
        $inputUsername = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : false;
        $inputPassword = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : false;
        $validated = ($inputUsername == $username) && ($inputPassword == $password);
        if (!$validated) {
            header('WWW-Authenticate: Basic');
            header('HTTP/1.0 401 Unauthorized');
            die('Girmek için yetkiniz bulunmuyor!');
        }
        return true;
    }

    public static function Logout()
    {
        header('HTTP/1.1 401 Unauthorized');
    }


}

Artık kullanırken şu şekilde bir kullanım ile kolayca kullanabiliriz;

$auth = Auth::Login('erbilen', '123123');
if ( $auth ){
    echo 'Hoşgeldiniz!';
}

Başka bir yazıda görüşmek üzere ????

Php ile Sınırsız Parametre Göndermek (Sef Linke Uygun)

Php ile istediğimiz kadar parametre gönderip, kısa yoldan bu parametleri nasıl kullanacağımızı öğreneceğiz.

Derste Kullandığım Fonksiyonların Açıklamaları;

– function_exists() => Bir fonksiyonun olup olmadığını kontrol eder. Varsa true, yoksa false değerini döndürür.
– call_user_func() => Bir fonksiyon çalıştırır, fonksiyona parametre gönderir.
– array_filter() => Dizi elemanlarını filtrelemek için kullanılır. Biz dersimizde boş değerleri kaldırmak için kullandık.
– explode() => Bir string ifadeyi, girilen karaktere göre parçalayıp dizi halinde bize geriye döndürür.

İndir;
http://yadi.sk/d/XxWkx2lQ2VU3l

Xampp’da “localhost” adresini değiştirmek

Bazı yabancı videolarda görüyorsunuz, http://localhost yerine http://work gibi adresler koyuyorlar. Peki bunu nasıl yapıyorlar? Aslında çok basit bir şekilde yapılıyor ????

C:\Windows\System32\Drivers\etc adresine girin, hosts dosyasını yönetici olarak düzenlemek için açın. Daha sonra aşağıdaki kısmı bulun.

#	127.0.0.1       localhost

Buradaki localhost kısmını istediğiniz şekilde değiştirin ve başındaki # işaretini kaldırın. Örneğin;

127.0.0.1       erbilen

Artık ben http://erbilen adresinden localhost klasörümün içindekileri görebilirim.

PHP gzcompress() ve gzuncompress() Fonksiyonları

Ne zaman sıkıştırmaktan bahsetsek, aklımız hep dosyaları sıkıştırmaya gidiyor, mesela ZIP dosyaları gibi. Ancak PHP’de uzun string ifadeleri de sıkıştırmanın bazı yolları var. Bu işlem için ise gzcompress() fonksiyonu kullanılıyor.

gzcompress()

Uzun string ifadeleri sıkıştırmak için kullanılır. Örnek vermek gerekirse;

$string = '1993 yılının Ocak ayında Eskişehir‘de dünyaya gözlerimi açtım. Sakin bir çocukluk geçirdikten sonra gençliğimin bir bölümünü oyunlara harcadım. Daha sonra front-end ile tanıştım ve uzun yıllar (halen) front-end olarak profesyonel çalışmalar yaptım (yapmaktayım). Front-end yanında birde back-end desteğimin olmasını istediğim için çeşitli yazılım dilleri ile bir çok profesyonel yazılım geliştirdim (hala geliştirmekteyim). 1993 yılının Ocak ayında Eskişehir‘de dünyaya gözlerimi açtım. Sakin bir çocukluk geçirdikten sonra gençliğimin bir bölümünü oyunlara harcadım. Daha sonra front-end ile tanıştım ve uzun yıllar (halen) front-end olarak profesyonel çalışmalar yaptım (yapmaktayım). Front-end yanında birde back-end desteğimin olmasını istediğim için çeşitli yazılım dilleri ile bir çok profesyonel yazılım geliştirdim (hala geliştirmekteyim).';
 
$compressed = gzcompress($string);

// Orijinal Boyutu: 935 
echo 'Orijinal Boyutu: '. strlen($string);

// Sıkıştırılmış Boyutu: 311
echo 'Sıkıştırılmış Boyutu: '. strlen($compressed);

gzuncompress()

Bu işlemi geri almak içinse bu fonksiyon kullanılır. Yukarıdaki örneğin devamı olarak şöyle örnek verelim;

$original = gzuncompress($compressed);

// Orijinal Boyutu: 935
echo 'Orijinal Boyutu: '. strlen($original);