• 31-03-2021, 22:18:25
    #1
    Selamlar,

    Wordpress sitemi ahrefs'de taratınca etiket sayfalarında description olmadığından dolayı uyarı verdiğini gördüm. 300'den fazla yazı etiketine tek tek description girmek çok zor olacağı için 33 satırlık bir kod yazdım. Çok basit sadece description'a etiketin ismini kaydediyor, başka herhangi bir işlevi yok. Benim işimi görüyor, belki ihtiyacı olan vardır diye buradan da paylaşmak istedim.

    İşlem öncesi mutlaka veritabanı yedeği alın. Kod çok basit db'ye zarar vermez ama tedbir iyidir. Ayrıca tecrübesiz biri yanlış tablo ismi yazıp db'yi çorba edebilir. Bunun olma ihtimali milyonda 1 Ancak!!
    Veritabanı ile şaka olmaz, kayboldu mu geri gelmez! Mutlaka yedek aldıktan sonra deneyin.

    $code kısmını dışarıdan başkasının erişimini engellemek için ekledim. Yani dosyaya erişirken dosyaadi.php?code=6cfa04a98690ffe39c38e1af47246dbe şeklinde yazmanız gerekir. Kendi kodunuzu oluşturabilirsiniz,

    md5(sha1(md5(sha1(md5(md5("kodkodkodkodkod"))))));
    kod yazan kısmı silip kendi istediğinizi yazıp kodu elde edin, daha sonra aynısını dosyaya da yazmayı unutmayın. Veritabanı bağlantısı, terms tablo adı ve taxonomy tablo adı kısımlarını doldurduktan sonra kullanıma hazır. Sadece description kısmı boş olan etiket kayıtlarına işlem yapar.

    <?php
    
    //6cfa04a98690ffe39c38e1af47246dbe -> r10r10r10r10)
    $code = md5(sha1(md5(sha1(md5(md5("r10r10r10r10)"))))));
    
    if(@$_GET['code']==$code){
        
    //veritabanı bağlantısı -> pdo
    $dbhost = "localhost";
    $dbuser = ""; //Veritabanı Kullanıcı Adı
    $dbpass = ""; //Veritabanı Şifresi
    $dbdata = ""; //Veritabanı Adı
    
    try {
         $db = new PDO("mysql:host=$dbhost;dbname=$dbdata", "$dbuser", "$dbpass", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    } catch ( PDOException $e ){
         print $e->getMessage(); exit();
    }
    
    $terms = ""; //terms tablo adı
    $taxonomy = ""; //taxonomy tablo adı
    $sorgu = $db->query("SELECT term_id,name FROM ".$terms." WHERE term_id IN (SELECT term_id FROM ".$taxonomy." WHERE taxonomy = 'post_tag' AND description='')"); //sorgu
    
    foreach($sorgu as $yaz){ //döngü
    
    $upd = $db->prepare("UPDATE ".$taxonomy." SET description=? WHERE term_id=?"); //güncelleme komutu
    $upd->execute(array($yaz['name'], $yaz['term_id'])); //çalıştır
    
     } //foreach son
    
    }else{ echo header("Location: https://r10.net"); } //if son
    
    ?>
    herkese iyi forumlar.
  • 01-04-2021, 07:05:06
    #2
    Merhabalar, öncelikle emeğinize sağlık.

    Ancak bir WordPress sitesinde neden harici mySQL bağlantısı, PDO kodlar olduğunu anlayamadım.

    get_terms() ve wp_update_term() komutları ihtiyacınız olan tek komutlar.

    get_terms()'e gerekli argümanları verdikten sonra içinde foreach çevirmeniz ve her foreach'deki term_id değeri için de wp_update_term() çevirmeniz yeterli.

    Üstteki Kodu WordPress'e uygun şekilde yazarsam:

    add_action( 'init', 'update_my_term_desc'); // bu kodun her WordPress çağırıldığında çalışmasını sağlar. Bu sebeple işleminizi gerçekleştirince bu hook'u kaldırınız.
    
    function update_my_term_desc(){
    
    $myTerms = get_terms(
    'taxonomy' => 'post_tag'
    );
    
    foreach($myTers as $myTerm){
    $termID  =  (int) $myTerm->term_id;
    $termName = sanitize_text_field($myTerm->name);
    
    // burası opsiyonel, size kalmış. Her description'ı tag adına özel yapmak isterseniz şöyle bir girişim yapılabilir:
    // String içine ' (tek kesme işareti) ile bir değer koymak isterseniz (Ali'nin evi gibi) lütfen \' sistemi ile atınız. Aksi halde hata alırsınız. (Örn: Ali\'nin Evi) doğrusudur.
    
    $mySpecialDesc = 'Bu açıklama '.$termName.' etiketine aittir. Burada harika bir açıklama var!';
    
    wp_update_term($termID , 'post_tag',
    array(
    'description' => $mySpecialDesc // buraya description gelecek
    ));
    }
    }
    kodunun daha doğru olduğunu söyleyebilirim. R10 editöründen yazdığım için kodda belki typo olabilir. Parantezleri kontrol etmenizde fayda var kullanmadan önce.

    Kodu temanızın functions.php'sine yerleştirdikten ve description metasını doldurduktan sonra kayıt ederek temanızın herhangi bir sayfasında refresh atın. İşlem tamamlanmış olacaktır. Ardından add_action() komutunun başına // ekleyerek her sayfa yüklemesinde çalışmasını durdurun. Gerektiği bir zaman tekrar // öğesini kaldırıp tekrarlayabilirsiniz.