WordPress’de yazıların ve sayfaların kısa isimlerini kolayca değiştirin

Bildiğiniz gibi Wordress ile kalıcı bağlantı ayarlarını kullanıp yazılarınız/sayfalarınız için daha anlaşılabilir adresler oluşturabiliyorsunuz. Yazınızın başlığını girdikten sonra, başlık alanı odağı kaybettiğinde kalıcı bağlantı adresi otomatik olarak oluşturulur. İsterseniz bu alana fareniz ile tıklayarak kalıcı bağlantı adresini değiştirebilirsiniz. Genelde WordPress yazı için başlığa göre en uygun kalıcı bağlantı adresini oluşturur. Peki kalıcı bağlantı adresi oluştuktan sonra yazınızın başlığını değiştirdiğinizde ne olacak? WordPress kalıcı bağlantıyı bir kere oluşturduktan sonra, sizin yapmış olabileceğiniz değişiklikleri kaybetmemek adına kalıcı bağlantı alanını tekrar değiştirmez. Başlığı değiştirdiğinizde kalıcı bağlantıyı da değiştirmeniz gerekir. Başlığa göre kalıcı bağlantının otomatik olarak tekrar yapılandırılmasını isterseniz ise yapacağınız şey aslında çok basit fakat pek göz önünde değil;

Kalıcı bağlantı alanına (açık sarı renk ile arkaplanı boyanmış alan) tıklayıp düzenleme moduna geçtiğinizde, açılan metin kutusunun içindeki tüm metni silin ve kaydet tuşuna basın. Metin kutusu boş olduğunda WordPress otomatik olarak yazı başlığına en uygun kalıcı bağlantı metnini üretecektir. İşte bu kadar kolay.

Mutlu bloglamalar!

jTopLeft – Bir elemanın sayfa üzerindeki yerini bulma

JavaScript ile bir elemanın tarayıcının görüş alanına göre ya da ebeveyni olan diğer bir elemana göre x ve y koordinatlarını belirlemeye yönelik bir betik hazırladım ve jQuery eklentisi haline getirdim. Eklentinin kendisini ve sıkıştırılmış halini aşağıda bulabilirsiniz.

Kullanımı:

var top = $('#elm').top();

var left = $('#elm').left();

var pos = $('#elm').pos();
top = pos.top;
left = pos.left;
/*
 * jTopLeft
 * https://www.karalamalar.net/
 *
 * Copyright (c) 2009 İzzet Emre Erkan
 * Licensed under Creative Commons Attribution-Share Alike 3.0 Unported License
 * http://creativecommons.org/licenses/by-sa/3.0/
 *
 * Date: 2009-10-12 17:56:24 +0300 (Mon, 12 Oct 2009)
 * Revision: 3
 */
(function($){  
  $.fn.extend({
    top: function(obj) {
      var o = findPos(this.get(0));
      return obj ? o - findPos(obj) : o;
    },
    left: function(obj) {
      var o = findPos(this.get(0),true);
      return obj ? o - findPos(obj,true) : o;
    },
    pos: function(obj) {
      var pos = {},o;
      
      o = findPos(this.get(0));
      pos.top = obj ? o - findPos(obj) : o;
      
      o = findPos(this.get(0),true);
      pos.left = obj ? o - findPos(obj,true) : o;
      
      return pos;
    }
  });
  function findPos(o,l){
    var x = 0;
    if (o.offsetParent) {
      x = l ? o.offsetLeft : o.offsetTop;
      while (o = o.offsetParent)
        x += l ? o.offsetLeft : o.offsetTop;
    }
    return x;
  }
})(jQuery);

Paketin küçültülmüş halini (802 byte) buradan edinebilirsiniz.

strExtensions – JavaScript için string uzantıları

JavaScript kullanırken eksikliğini hissettiğim bir kaç string metot var. padLeft, padRight, trimLeft, trimRight ve trim metotları varsayılan string metotları arasında yer almıyor. Zaman içinde çeşitli projelerde bu metotlara ihtiyaç duydukça yazıp yazıp bir kenara koymuştum. Şimdi bu metotları toplayıp ufak bir paket oluşturdum ve sizlerle de paylaşayım dedim. valiDate v2.0‘ı da bu pakete dahil ettim. Metotları aşağıda bulabilirsiniz;

/*
 * strExtensions - String extensions
 * https://www.karalamalar.net/
 *
 * Copyright (c) 2009 İzzet Emre Erkan
 * Licensed under Creative Commons Attribution-Share Alike 3.0 Unported License
 * http://creativecommons.org/licenses/by-sa/3.0/
 *
 * Date: 2009-10-08 17:43:34 +0300 (Thu, 08 Oct 2009)
 * Revision: 2
 */
String.prototype.trimLeft =
  function(c) {
    c = c || ' ';
    return this.replace(new RegExp('^'+c+'+'),"");
  };
String.prototype.trimRight =
  function(c) {
    c = c || ' ';
    return this.replace(new RegExp(''+c+'+$'),"");
  };
String.prototype.trim =
  function(c) {
    return this.trimLeft(c).trimRight(c);
  };
String.prototype.padLeft =
  function(l, c) {
    c = c || ' ';
    var s = this.toString();
    while (s.length < l) s = c + s;
    return s;
  }
String.prototype.padRight =
  function(l, c) {
    c = c || ' ';
    var s = this.toString();
    while (s.length < l) s = s + c;
    return s;
  }
String.prototype.valiDate =
  function() {
    if(/^(0[1-9]|[12][0-9]PO|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}$/.test(this)) {
      var v = this.replace(/[- /]/g,'.').split('.');
      var d=parseInt(v[0],10), m=parseInt(v[1],10), y=parseInt(v[2],10);
      var o = new Date(y, m - 1, d);
      return o.getDate() == d && o.getMonth() + 1 == m && o.getFullYear() == y;
    }
    else
      return false;
  }

Paketin küçültülmüş halini (1130 byte) buradan edinebilirsiniz.

valiDate v2.0

Daha önce ilk versiyonunu sizlerle paylaştığım valiDate metodunu biraz daha geliştirdim. String nesneleri doğrulama amaçlı kullandığım için String nesnesinin prototype’ına ekleyerek herhangi bir metin değişken üzerinde kolayca tarih doğrulaması yapılabilmesine olanak sağladım. Ayraç olarak “-“,” “,“/” ya da “.” karakterlerini kullanıyor, yani doğrulanan metnin ilgili ayraç ile ayrılmış dd.mm.yyyy formatında olmasını bekliyor.

/*
 * valiDate
 * https://www.karalamalar.net/
 *
 * Copyright (c) 2009 İzzet Emre Erkan
 * Licensed under Creative Commons Attribution-Share Alike 3.0 Unported License
 * http://creativecommons.org/licenses/by-sa/3.0/
 *
 * Date: 2009-10-08 16:51:00 +0300 (Thu, 08 Oct 2009)
 * Revision: 6
 */
String.prototype.valiDate =
  function() {
    if(/^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}$/.test(this)) {
      var v = this.replace(/[- /]/g,'.').split('.');
      var d=parseInt(v[0],10), m=parseInt(v[1],10), y=parseInt(v[2],10);
      var o = new Date(y, m - 1, d);
      return o.getDate() == d && o.getMonth() + 1 == m && o.getFullYear() == y;
    }
    else
      return false;
  }

Metodun küçültülmüş halini (640 byte) buradan edinebilirsiniz.

Küçük kardeşim

Biraz kişisel bir yazı olacak. Uzun zamandır bu kadar kişisel bir yazı da yazmıyordum. Beni bu yazıyı yazmaya iten küçük kardeşimin son zamanlardaki sosyal ağlardaki etkinliği oldu.

Biz üç kardeşiz ve ben en büyükleriyim. Ortanca kardeşim ile aramda çok fazla yaş farkı yok, fakat küçük kardeşimle aramda epey yaş farkı var. Ortanca kardeşim ile beraber büyüdük, ne var ki küçük kardeşimle aramdaki yaş farkı, benim hayata atılmam, onun hayat dönemleri derken çok fazla yanında olamadım, olamıyorum. Yine de her fırsatı iyi değerlendirmeye çalışıyorum.

Küçük kardeşimle ilgili çok ilginç bir nokta var ki, benim ne kadar hoşuma gidiyorsa, onun da o kadar hoşuna gitmiyor sanki. Ya da bir görüş bildirmekten uzak. Fiziksel olarak çocukluğu benim çocukluğuma benziyordu. Bu benzerlik kardeşler arasında çok anormal değil elbette ki. Fakat zaman geçtikçe, benim özel bir müdahelem olmasa da kardeşim benim gençliğimde yaptığım şeyleri hem benden daha erken, hem de daha istikrarlı ve daha iyi yapıyor. Belirli noktalarda ayrılsak da bir çok noktada çok benzer kararlar veriyoruz. Gerek ben gerekse aile bireylerim bu benzerlikleri işaret ettiğimizde haliyle biraz sıkılıyor. Açıkçası empati kurduğumda ben de sıkılacağımı düşünüyorum. Sürekli birilerinin yaptığınız şeyler için “aaa bunu da abin yapmıştı” şeklinde yaklaşması pek hoş olmasa gerek.

Yine de bu konu çok ilgimi çekiyor. Verdiği kararlarda benim ne kadar etkim var bilmiyorum fakat bazen o kadar aynı kararlar veriyor ya da aksiyonlarda bulunuyor ki, birbirinin aynısı ya da bu kadar benzeri olayların ortaya çıkmasına ihtimal veremiyorum.

Geçenlerde bir facebook profili edindi kendisine, daha sonra da sırasıyla friendfeed, twitter vs bir çok sosyal ağa katıldı. En son icraatı da bisiklet maceralarını yazdığı blogu oldu. ilk yazısı çok hoşuma gitti. Blogun haricinde friendfeed akışını da ilgiyle takip ediyorum.

Sizlere de takip etmenizi öneririm. Çünkü biliyorum ki her zaman olduğu gibi bu konuda da beni geçecektir. :)