lostyazilim
tr.link

Shortcode fonksiyonu içine yazılan karakterleri saydırma ve x üstüne değer yazdırma

10 Mesajlar 1.203 Okunma
acebozum
tr.link

MuratDinc MuratDinc Miyavliyo - WiseKitten Kullanıcı
  • Üyelik 01.11.2012
  • Yaş/Cinsiyet 32 / E
  • Meslek Girişimci
  • Konum Balıkesir
  • Ad Soyad M** D**
  • Mesajlar 1583
  • Beğeniler 207 / 257
  • Ticaret 5, (%100)
Merhabalar,

Wordpress bir sitede Shortcode ile bir fonksiyon kullanıyorum. Yapmak istediğim Shortcode alanındaki karakterlerin fonksiyon içerisinde sayılması ve 45'den fazla ise x yere önceden belirlenmiş bir değerin eklenmesi gerekiyor. Yani Shortcode içerisindeki yazı uzun ise html'de bulunan class içerisine css atamak için değer yazdırmak istiyorum.

Düzenlenecek kod şu şekilde;
function bt_link( $atts, $content = null ) {
return '';
}


Kullanım şekli; (68 karakter)
[link]Guardians of the Galaxy: Telltale – Bölüm 1 İnceleme (PlayStation 4)[/link]

Olması gereken kod örneği; ()
function bt_link( $atts, $content = null ) {
return '';
}

Nasıl bir kod ".$content." içeriğine eklenen yazının karakter sayısını sayıp 45'den fazla ise "BURAYA-EKLENECEK" yazan alana ek class değeri atar?

Şimdiden teşekkürler.
 

 

👉 Türkiye'nin En Minnoş Kedi Bloğu Miyaliyo! 😻
wmaraci
reklam

YORci YORci yorci.com Kullanıcı
  • Üyelik 06.02.2016
  • Yaş/Cinsiyet 29 / E
  • Meslek Arkaplan Yazılım
  • Konum Ankara
  • Ad Soyad I** Y**
  • Mesajlar 261
  • Beğeniler 88 / 127
  • Ticaret 21, (%100)
strlen fonksiyonu ile content değişkeninin uzunluğunu alabilirsin, if ile de şu karakterden uzunda bunu ekle diyebilirsin.
 

 

MuratDinc MuratDinc Miyavliyo - WiseKitten Kullanıcı
  • Üyelik 01.11.2012
  • Yaş/Cinsiyet 32 / E
  • Meslek Girişimci
  • Konum Balıkesir
  • Ad Soyad M** D**
  • Mesajlar 1583
  • Beğeniler 207 / 257
  • Ticaret 5, (%100)
PHP konusunda giriş seviyesi bilgi sahibiyim, nasıl yapacağımı bilmiyorum. Kodlara eklemeniz mümkün mü acaba?

YORÇI adlı üyeden alıntı

strlen fonksiyonu ile content değişkeninin uzunluğunu alabilirsin, if ile de şu karakterden uzunda bunu ekle diyebilirsin.
 

 

👉 Türkiye'nin En Minnoş Kedi Bloğu Miyaliyo! 😻

fmdogancan fmdogancan WM Aracı Kullanıcı
  • Üyelik 22.09.2014
  • Yaş/Cinsiyet 29 / E
  • Meslek Yazılım
  • Konum İstanbul Avrupa
  • Ad Soyad F** D**
  • Mesajlar 46
  • Beğeniler 6 / 10
  • Ticaret 0, (%0)

$css_class = "";
if(strlen($contents) > 45){
$css_class = "test"
}
'';
MuratDinc

kişi bu mesajı beğendi.

Github: https://github.com/fatihmert | CV: http://fatihmert.dev/        
wmaraci
wmaraci

MuratDinc MuratDinc Miyavliyo - WiseKitten Kullanıcı
  • Üyelik 01.11.2012
  • Yaş/Cinsiyet 32 / E
  • Meslek Girişimci
  • Konum Balıkesir
  • Ad Soyad M** D**
  • Mesajlar 1583
  • Beğeniler 207 / 257
  • Ticaret 5, (%100)
Süpersiniz, bu işime yaradı. Ancak atladığım bir detay varmış. Bu şekilde yaptığımızda $content içerisindeki html'de sayılıyor. Yani örneğin bağlantı verilmemiş bir içerik 44 karakter olup özellik çalışmazken, bağlantı..vb html kullanılmış 44 karakter olan diğer başlıkta özellik çalışıyor.

Bağlantısız örnek: 17 karakter görünür ve özellik çalışmaz.
Roots of Insanity

Bağlantılı örnek: 17 karakter görünür, 100 karakter html görünmez ancak toplam 117 karakter sayıldığı için çalışmış olur.
Roots of Insanity



fmdogancan adlı üyeden alıntı


$css_class = "";
if(strlen($contents) > 45){
$css_class = "test"
}
'';
 

 

👉 Türkiye'nin En Minnoş Kedi Bloğu Miyaliyo! 😻

fmdogancan fmdogancan WM Aracı Kullanıcı
  • Üyelik 22.09.2014
  • Yaş/Cinsiyet 29 / E
  • Meslek Yazılım
  • Konum İstanbul Avrupa
  • Ad Soyad F** D**
  • Mesajlar 46
  • Beğeniler 6 / 10
  • Ticaret 0, (%0)
Rica ederim.

Eğer sadece $content değerleri içerisinde bir tane HTML tagı ( gibi) olabiliyor ise bu durumu düzenli ifadeler ile çözebiliriz. Bir den fazla farklı tag oluşuyor ise, DOM kütüphanesi kullanmak daha sağlıklı olacaktır.

Bir tane olduğunu var sayarsak durum şöyle çözülecektir;

Düzenli ifadeler demiştik; HTML tag içerisindeki yazıyı yakalayan düzenli ifadaler kodu aşağıdaki gibidir;

/.*>(.*)?

Şuradan daha detaylı inceleyebilirsiniz: ://regex101.com/r/RSaCFc/1

Örnek vermiş olduğunuz linkten içerisindeki yazıyı çeken PHP kodu şu şekilde;

$str = 'Roots of Insanity';

if(preg_match('/.*>(.*)? $tagIcerigi = $matches[1];
}


Örneğe oturtursak şu şekilde olması gerekiyor;

$css_class = "";

//Eğer HTML tagına ait bir şey yakalarsa
if(preg_match('/.*>(.*)?
if(strlen($contents) > 45) $css_class = "test";
return '';


Umarım doğru anlamışımdır.
 

 

Github: https://github.com/fatihmert | CV: http://fatihmert.dev/        

MuratDinc MuratDinc Miyavliyo - WiseKitten Kullanıcı
  • Üyelik 01.11.2012
  • Yaş/Cinsiyet 32 / E
  • Meslek Girişimci
  • Konum Balıkesir
  • Ad Soyad M** D**
  • Mesajlar 1583
  • Beğeniler 207 / 257
  • Ticaret 5, (%100)
Evet hocam mantığı anladım. Eklediğimde HTML'i saymaması gerekirken sildi :D Silince oldu tabi de silmek yerine görmezden gelmesi lazımdı. Neden böyle oldu ki

Şunu ekledim:
if(preg_match('/.*>(.*)?

fmdogancan adlı üyeden alıntı

Rica ederim.

Eğer sadece $content değerleri içerisinde bir tane HTML tagı ( gibi) olabiliyor ise bu durumu düzenli ifadeler ile çözebiliriz. Bir den fazla farklı tag oluşuyor ise, DOM kütüphanesi kullanmak daha sağlıklı olacaktır.

Bir tane olduğunu var sayarsak durum şöyle çözülecektir;

Düzenli ifadeler demiştik; HTML tag içerisindeki yazıyı yakalayan düzenli ifadaler kodu aşağıdaki gibidir;

/.*>(.*)?

Şuradan daha detaylı inceleyebilirsiniz: ://regex101.com/r/RSaCFc/1

Örnek vermiş olduğunuz linkten içerisindeki yazıyı çeken PHP kodu şu şekilde;

$str = 'Roots of Insanity';

if(preg_match('/.*>(.*)? $tagIcerigi = $matches[1];
}


Örneğe oturtursak şu şekilde olması gerekiyor;

$css_class = "";

//Eğer HTML tagına ait bir şey yakalarsa
if(preg_match('/.*>(.*)?
if(strlen($contents) > 45) $css_class = "test";
return '';


Umarım doğru anlamışımdır.
 

 

👉 Türkiye'nin En Minnoş Kedi Bloğu Miyaliyo! 😻

fmdogancan fmdogancan WM Aracı Kullanıcı
  • Üyelik 22.09.2014
  • Yaş/Cinsiyet 29 / E
  • Meslek Yazılım
  • Konum İstanbul Avrupa
  • Ad Soyad F** D**
  • Mesajlar 46
  • Beğeniler 6 / 10
  • Ticaret 0, (%0)
Çünkü HTML tag içindekini aldık sadece, düzenli ifadelerde parantezler gruplama işlemi yapıyor ve bunu diziye çeviriyor, $matches[1] ile ilk yakalanan gruplamayı aldık. HTML silinmedi aslında, tam HTML ise, $matches[0] içerisinde halen duruyor.
 

 

Github: https://github.com/fatihmert | CV: http://fatihmert.dev/        

MuratDinc MuratDinc Miyavliyo - WiseKitten Kullanıcı
  • Üyelik 01.11.2012
  • Yaş/Cinsiyet 32 / E
  • Meslek Girişimci
  • Konum Balıkesir
  • Ad Soyad M** D**
  • Mesajlar 1583
  • Beğeniler 207 / 257
  • Ticaret 5, (%100)
.$contents. yerine .$matches[0]. yazmak gerekiyor o halde?

fmdogancan adlı üyeden alıntı

Çünkü HTML tag içindekini aldık sadece, düzenli ifadelerde parantezler gruplama işlemi yapıyor ve bunu diziye çeviriyor, $matches[1] ile ilk yakalanan gruplamayı aldık. HTML silinmedi aslında, tam HTML ise, $matches[0] içerisinde halen duruyor.
 

 

👉 Türkiye'nin En Minnoş Kedi Bloğu Miyaliyo! 😻

fmdogancan fmdogancan WM Aracı Kullanıcı
  • Üyelik 22.09.2014
  • Yaş/Cinsiyet 29 / E
  • Meslek Yazılım
  • Konum İstanbul Avrupa
  • Ad Soyad F** D**
  • Mesajlar 46
  • Beğeniler 6 / 10
  • Ticaret 0, (%0)
Sanırım öyle yapman gerekiyor, bir dene bakalım. Tam olarak ne yapmak istediğini kesitiremediğim için anladığım şekilde yazdım.
 

 

Github: https://github.com/fatihmert | CV: http://fatihmert.dev/