Kategori arşivi: Wordpress

wordpress kod örnekleri, wordpress performans iyileştirme teknikleri, wordpress güvenlik çözümleri, hata giderme taktikleri ve ipuçları

Wordpress İçin Zararlı Yazılım Yayan Web Siteleri

Warez tema, eklenti ve bilimum bileşeni ücretsiz olarak size sunduğunu söyleyerek, umut tacirliği yapan ve bol miktarda malware bulunduran ve yayan web siteleri aşağıdaki gibidir.

Bu web sitelerden asla ve asla içerik indirmeyiniz.

Güncelleme: 17 Temmuz 2020

downloadfreethemes.co
downloadfreethemes.space
downloadnulled.pw
freenulled.top
nulledzip.download
themesfreedownload.net
themesfreedownload.top
vestathemes.com
wpnull24.com
nulledfree.pw
2nulled.com
null5.top
xnulls.com
nulled.today
wpthemify.com
allwpworld.com

Wordpress 5.5 Sitemap Nasıl Kapatılır?

Wordpress’in 11 Ağustos 2020 tarihinde yayınlanacak olan 5.5 sürümü içerisinde ön tanımlı olarak gelecek site haritasını kullanmak istemeyen arkadaşlarımız olabilir,

Kapatma işlemini gerçekleştirmek için temanızda yer alan functions.php dosyası içerisine aşağıdaki satırları eklemeniz yeterli olacaktır.

remove_action( 'init', 'wp_sitemaps_get_server' );

İşlem başarılı şekilde gerçekleşti, artık istediğiniz XML Sitemap harita eklentisini kullanabilirsiniz.

Wordpress JS Dosyalarını Footer İçerisine Göndermece

Ufak kod parçalarımız ile Wordpress sistemimizde hızlanma sağlayabiliriz. Aşağıda vermiş olduğum kod parçasını temanızda bulunan functions.php içerisine en son satıra ekleyin ve kayıt edip çıkın

Cache eklentisi kullanıyorsanız cache temizleyin. Daha sonra Tüm JS dosyalarının headerdan gittiğini göreceksiniz.

Bunu yaptığınızda sitenizin görüntüsü bozulabilir. Her temada çalışmayacağı gibi çalışanıda bozabilirsiniz. Ama Bozulmazsa hız artışınız olur 🙂

Evet hepsini body içerisine en alta attık gitti

function remove_head_scripts() { 
   remove_action('wp_head', 'wp_print_scripts'); 
   remove_action('wp_head', 'wp_print_head_scripts', 9); 
   remove_action('wp_head', 'wp_enqueue_scripts', 1);
 
   add_action('wp_footer', 'wp_print_scripts', 5);
   add_action('wp_footer', 'wp_enqueue_scripts', 5);
   add_action('wp_footer', 'wp_print_head_scripts', 5); 
} 
add_action( 'wp_enqueue_scripts', 'remove_head_scripts' );

Wordpress Beans Framework İçin Ufak İpuçları

Geçtiğimiz günlerde sırf canım sıkıldığı için Wordpress geçeyim dedim. Bunu yaparkende sade tema aradım taradım bulamadım. Sonra frameworklere göz atayım dedim ve sadeliği hoşuma giden Beans ile karşılaştım. Ama ön tanımlı olarak postların tüm içeriğini gösteriyordu. Bende bunların bir kısmını gösterip geri kalanı için ise Devamını Oku... yaptım. Böylelikle kalabalıklıktanda kurtulmuş oldum. Ayrıca Gtmetrix değerlerininde normale dönmesini sağladım.

// Kategorilerde Devamını oku yapalım
add_filter( 'the_content', 'example_category_truncated_content' );

function example_category_truncated_content( $content ) {

    // Only truncate for category view.
    if ( is_category() ) {
        // Return truncated content and readmore.
        return '<p>' . wp_trim_words( $content, 40, '...' ) . '</p><p>' . beans_post_more_link() . '</p>';
    }

    return $content;

}

// Sayfalarda Devamını oku yapalım
add_filter( 'the_content', 'example_post_truncated_content' );

function example_post_truncated_content( $content ) {

    if ( is_home() ) {
        // Return truncated content and readmore.
        return '<p>' . wp_trim_words( $content, 40, '...' ) . '</p><p>' . beans_post_more_link() . '</p>';
    }

    return $content;

}

// Font seçimi
add_action( 'wp_enqueue_scripts', 'example_assets' );
/**
 * Enqueue assets.
 */
function example_assets() {
    wp_enqueue_style( 'open-sans', 'https://fonts.googleapis.com/css?family=Open+Sans' );
}

Daha sonra Dil ve Copyright mesajlarını halletmemiz gerekiyor. Yoksa direk olarak Read more... olarak gözükecek isterseniz bu şekildede bırakabilirsiniz. Tercih size ait

add_filter( 'beans_footer_credit_right_text_output', 'example_footer_credit_right_text' );

function example_footer_credit_right_text() {

	return 'Linux Hacısı';

}

add_filter( 'beans_post_more_link_text_output', 'example_modify_read_more' );

function example_modify_read_more() {

   return 'Devamını Oku...';
   
}

Ayrıca Beans oldukça sade bir tasarıma sahiptir wordpress için tema geliştirmenize oldukça güzel bir şekilde imkan sağlar.

Beans Framework

dipnot: Beans open source olarak geliştirilen bir tema projesidir. Bazı projeler için framework görevide görmektedir.

Wordpressde İstenmeyen Tüylerden Kurtulma

Bir kaç gün wordpress ile uğraşınca bu konularda da insanlara yardımcı olmak istedim şöyle ki bu wordpress de gereğinden fazla ve bana göre de gereksiz olan bir takım özellikleri var. Bunlarda sitede fazlalık yapmasın diye ben genelde kapatıyorum. Kullanıyorsanız ayıklama işlemi yapabilirsiniz.

# Sürüm Bilgisi kapat
remove_action('wp_head', 'wp_generator');

# RSS linkleri Kaldır
remove_action('wp_head', 'feed_links', 2);
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'index_rel_link');

# Windows Live Writer Kapat (wlwmanifest.xml)
remove_action('wp_head', 'wlwmanifest_link');

# Random gönderi link kapat
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'parent_post_rel_link', 10, 0);

# Önceki ve Sonraki özelliğini kapat
remove_action('wp_head', 'adjacent_posts_rel_link', 10, 0);
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );

# WP kısa link kapat
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0 );

# Canonical linkleri kaldır
remove_action('wp_head', 'rel_canonical', 10, 0 );

# Yorumlara ait çerez bilgisi tutma
remove_action('set_comment_cookies', 'wp_set_comment_cookies');

# Kayıt olunduktan sonra onay mail gönderme
remove_action('um_post_registration_approved_hook', 'um_post_registration_approved_hook', 10, 0);

# Emojileri kapat
remove_action('wp_head', 'print_emoji_detection_script', 7 );
remove_action('admin_print_scripts', 'print_emoji_detection_script' );
remove_action('wp_print_styles', 'print_emoji_styles' );
remove_action('admin_print_styles', 'print_emoji_styles' );	
remove_filter('the_content_feed', 'wp_staticize_emoji' );
remove_filter('comment_text_rss', 'wp_staticize_emoji' );	
remove_filter('wp_mail', 'wp_staticize_emoji_for_email' );

yukarıdaki kodları tema dosyalarınız içerisinde bulunan function.php dosyasına ekleyin.

Wordpress Sitemap.xml Zafiyeti

Başlığın ilginç geldiğinin farkındayım.Bu günkü yılbaşı özel yazımızda sizlere wordpress sitelerde kullanılan ve statik olarak tutulmayan sitemap eklentilerinin aslında sitelere nasıl zarar verebilecek birer saatli bombaya dönüştüğünü göstermek istiyorum.

İlk olarak kullanılacak ekipmanları ayarlamanız gerekiyor.

  • 1 Adet linux tabanlı bilgisayar
  • İnternet bağlantısı

ilk olarak bilgisayarınızı güzelce açıyorsunuz herşeyi hazırlıyorsunuz koltuğunuzu falan ayarlamanız lazım internete bağlanıyorsunuz.Daha sonrasında sisteminizde aşağıdaki uygulamayı kurmanız gerekiyor.

sudo apt-get install parallel

bu uygulama size paralel olarak işlem yapma imkanı tanıyacak yani birden çok istek gönderebilmeye yarayacak kullanım amacınıza göre yapılacak işlemler tabikide değişiklik gösterecek ancak genel amacı paralel işlem yaptırma

Wordpress sitelerde genelde popüler olan üç adet sitemap eklentisi bulunmakta bunlar genellikle sitelerdeki içeriği PHP aracılığı ile sitemap oluştururlar yani bir bakıma sanal bir sitemap dosyanız olur. Bu 3 eklentinin de siteler üzerinde yükünün oldukça fazla olduğu ve ram kullanımını ciddi şekilde arttırdığı gözlemlenmiştir.Yapılacak olan işlemde bu dosyalar üzerinde yoğunlaştırılmıştır.

  • Yoast SEO
  • Google XML Sitemap
  • All in One SEO Pack

Statik olarak oluşturulmayan sitemap her seferinde istek aldığında tekrar ve tekrar sistem tarafından PHP aracılığı ile oluşturulur.Bu her oluşturulma da 43 MB ram kullanımı demektir.

43*1000=43000 MB Ram kullanımı demektir.Parametre değiştirilerek daha fazla RAM kullanımı sağlanabilir.Ayrıca sayfaya atılan her isteğin boyutu test için kullandığım bir web sitesinde 1.1MB buluyordu yaptığımız 1000 istekde ise karşı tarafdan 1.1*1000= 1100 MB veri demektir.Hal böyle olunca sitedede ciddi şekilde bir trafik olduğu için isteklere cevap veremeyecek duruma gelmekte ve isteklere timed out vermektedir.

ilk olarak saldırı geldiği anda  CPU yavaş yavaş artmaya gelen isteklere cevap verememeye başlıyor. Ddos koruması olan sunucularda bu şekilde sistemi kapatabilirsiniz.Çünkü bu basit bir HTTP saldırısıdır.Ancak engellenmesi kolaydır.

Saldırıya başladığımız ilk anda sistemden bir görüntü (Sisteme zarar vermemesi amacıyla 30 sn den sonra devam edilmemiştir.)

sitemapzafiyetgorsel1

Saldırıya devam ettiğimizde CPU kullanımı %100 RAM kullanımı da %98 lere fırlıyor.Tabi sitede kullanılan eklentiye göre durum değişiyor misal all in seo kullanılıyor ise sadece CPU fırlıyor. Google XML Sitemap eklentisi ve Yoast SEO eklentisinde ki sitemap özelliği kullanılırsa hem CPU hemde RAM de ciddi derecede bir yükselme oluyor.

Saldırı anında ise web server tarafından tutulan loglara göz atabilirsiniz.Şu şekilde bir takım loglar ile karşılaşacaksınız.

saldirianiloglar

Direk olarak HTTP GET saldırısını simule eden ilginç bir yapıya sahip olduk normalde pek çok site bu denli bir isteğe alışkındır ancak cache sistemi ile tutulmayan ve gelen her istek için yeniden sayfa oluşturan sistemlerde bu zafiyet oldukça etkili olacaktır. Tabi ki kullanılmasını önermiyoruz.

Parametremiz ise şu şekilde

seq 100000 | parallel -j0 --joblog log curl -s siteadresi/sitemap.xml{} ">" {}.txt

bu komutu kullanırken mümkün olduğunca dizini rastgele seçmeyin oluşacak olan txt dosyalarını kontrol edemeyeceğiniz için sıkıntı çıkartabilir herhangi bir klasör oluşturup bu komutu da o klasör içerisinde vermenizi öneririm.

Peki bu sıkıntıdan nasıl kurtulursunuz.Herhangi birisinin sitemap üzerinden yaptığı bu saldırıyı durdurmanız için gelen istekleri limitlemeniz oldukça işinize yarayacak.

nginx.conf dosyanızın içerisine http{ } bloğu içerisine aşağıdaki 2 adet komutu ekliyorsunuz ilki gelen istekleri limitler ikinciside bağlantıyı limitler

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;

bu iki komut sonrasında sitenizde kullandığınız conf dosyasına aşağıdaki gibi bir satırı eklemeniz yeterli olacak.

location = .xml{
       limit_req zone=one burst=10;
}

aynı şekilde PHP uzantılı dosyalarada şöyle bir ekleme yapabilirsiniz.

location ~ .php$ {
       limit_req zone=one burst=10;
       limit_conn addr 1;
}

bu sayede sistemdeki dosyalarınıza gelen istekler sizin belirlemiş olduğunuz sınırı geçerse otomatik olarak yasaklanacak ve gereksiz yere sistem tüketmesi yaşanmayacak.Kesin bir çözüm olmasa da işinize oldukça yarayacağını düşünüyorum.

Yardımlarından dolayı Furkan Kalkan a Teşekkür ederim.

NOT: Yukarıdaki bahsettiklerim sistem yöneticileri tarafından unutulan ve yapılması gereken mutlak ayarlamaları içermekte ve bu ayarların yapılmaması dahilinde oluşabilecek basit ama zararlı zafiyeti göstermek amacı ile yazılmıştır.Site içerisinde bulunan ve uzantısı farklı olan dosyaların ve dinamik olarak oluşturulan tüm sayfaların korumaya alınması mecburidir.

Wordpress Temalar için Güvenlik Önlemleri

Wordpress sitenizin tema dosyası içerisinde bulunan functions.php içerisine aşağıdaki komutları yerleştirdiğiniz taktirde siteniz hakkındaki bazı bilgiler silinecektir.

Yapılan ayarlar ile hedeflenenler;

  • Dosyaların sonunda bulunan versiyon bilgilerini kaldırır
  • Site içerisindeki Email adresslerini kaldır
  • Admin bar özelliği kaldırılır
  • Admin bar seçenekleri kullanıcı panelinden kaldırılır
  • CSS ve JS dosyalarının versiyon bilgileri kaldırılır
  • Admin olmayan kullanıcılardan admin bildirimleri kaldırılır
  • Belirtilen farklı bir avatar eklenir
  • Wordpress 4.2 ile gelen emojicons özelliği kaldırılır
<?php
/* Custom Wordpress Functions
/*------------------------------*/
function _remove_script_version( $src ){
    $parts = explode( '?ver', $src );
        return $parts[0];
}
add_filter( 'script_loader_src', '_remove_script_version', 15, 1 );
add_filter( 'style_loader_src', '_remove_script_version', 15, 1 );
function wptao_disable_version_info() { return ''; }
add_filter('the_generator', 'wptao_disable_version_info');
add_filter('login_errors',create_function('$a',"return null;"));

remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wp_generator');
/*E-mail Remove*/
function security_remove_emails($content) {
    $pattern = '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4})/i';
    $fix = preg_replace_callback($pattern,"security_remove_emails_logic", $content);

    return $fix;
}
function security_remove_emails_logic($result) {
    return antispambot($result[1]);
}
add_filter( 'the_content', 'security_remove_emails', 20 );
add_filter( 'widget_text', 'security_remove_emails', 20 );

/* Admin Bar özelliğini iptal et */
add_filter( 'show_admin_bar', '__return_false' );

/* Admin Bar seçeneklerini kullanıcı profilinden kaldır */
remove_action( 'personal_options', '_admin_bar_preferences' );

/*Css and JS Versiyon Remove*/
function vc_remove_wp_ver_css_js( $src ) {
    if ( strpos( $src, 'ver=' . get_bloginfo( 'version' ) ) )
        $src = remove_query_arg( 'ver', $src );
    return $src;
}
add_filter( 'style_loader_src', 'vc_remove_wp_ver_css_js', 9999 );
add_filter( 'script_loader_src', 'vc_remove_wp_ver_css_js', 9999 );

/*Hide admin notifications for non admins*/
function hide_update_notice_to_all_but_admin_users()
{
    if (!current_user_can('update_core')) {
        remove_action( 'admin_notices', 'update_nag', 3 );
    }
}
add_action( 'admin_head', 'hide_update_notice_to_all_but_admin_users', 1 );
/*Costum Avatar*/
add_filter( 'avatar_defaults', 'newgravatar' );

function newgravatar ($avatar_defaults)
{
    $myavatar = "avatarlink";
    $avatar_defaults[$myavatar] = "avatarNick";
    return $avatar_defaults;
}

function disable_wp_emojicons() {

  // all actions related to emojis
  remove_action( 'admin_print_styles', 'print_emoji_styles' );
  remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
  remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
  remove_action( 'wp_print_styles', 'print_emoji_styles' );
  remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
  remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
  remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );

  // filter to remove TinyMCE emojis
  add_filter( 'tiny_mce_plugins', 'disable_emojicons_tinymce' );
}
add_action( 'init', 'disable_wp_emojicons' );

function disable_emojicons_tinymce( $plugins ) {
  if ( is_array( $plugins ) ) {
    return array_diff( $plugins, array( 'wpemoji' ) );
  } else {
    return array();
  }
}

Wp-login.php Bruteforce Saldırısı

Son zamanlarda yüklü miktarda bruteforce saldırıları almaktaydım.Sonra internetten araştırınca milyonlarca wordpress kullanıcısına aynı anda bir saldırı gerçekleştirildiğini okudum haliyle bunu kesmemiz gerekiyordu çünkü tekde 40 kez şifre denemesi yapıyordu bulacağından değil ama CPU yu kastırma durumu vardı MySQL boşu boşuna yoracaktı ne yapalım ne yapalım derken saldırının nasıl geldiğine bi bakmamız gerekiyordu.Bir baktım ki gelen Saldırılar POST şeklinde bize ulaşıyor botlar aracılığı ile

"POST /wp-login.php HTTP/1.1" 302 4477 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)"
"POST /wp-login.php HTTP/1.1" 302 4479 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)"
"POST /wp-login.php HTTP/1.1" 302 4487 "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)"
"POST /wp-login.php HTTP/1.1" 302 4643 "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)"

İlk olarak dedim ki 2.bir güvenlik şifresi ile doğrulatıp sonra wp-login e ulaşabilirdim ancak bu bana vakit kaybettirirdi ama botların ayağını keserdi.

AuthUserFile ~/.htpasswd

AuthName “Hop Dedik...”

AuthType Basic

Require valid-user

Ancak en kolayı olan htacc ile POST dan gelen botların önünü kesmek olurdu diye düşündüm bunu ben aynı zamanda spam yorum gelmemesi için kullanmaktaydım ve görüldüğü üzere spam namına birşey gelmemekteydi.

# Stop spam attack logins and comments
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{REQUEST_METHOD} POST
	RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login).php*
	RewriteCond %{HTTP_REFERER} !.*mertcangokgoz.com.* [OR]
	RewriteCond %{HTTP_USER_AGENT} ^$
	RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L]
</ifModule>

Tabi önceleri ben bunu sadece spam için kullanıyordum o yüzden kodum farklı idi spam sorununuzu eklentisiz çözmek istiyorsanız böyle bir imkanda mevcut.

# BLOCK NO-REFERRER SPAM
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_REFERER} !(.*)mertcangokgoz.com(.*) [NC]
RewriteCond %{REQUEST_URI} /wp-comments-post.php [NC]
RewriteRule .* - [F]
</IfModule>
# END WordPress

Aynı şekilde bir yönlendirme yapmak istemiyorsanız ve direk forbidden döndürmek istiyorsanız bi üstdeki kod işinize yaramaz pek fazla

# BLOCK NO-REFERRER SPAM
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_REFERER} !(.*)mertcangokgoz.com(.*) [NC]
RewriteCond %{REQUEST_URI} /wp-login.php [NC]
RewriteRule .* - [F]
</IfModule>
# END WordPress

Buda wp-logine düzenlenmiş POST req engelleme komutumuz .htacc ye ekliyoruz ve botların ayaklarını bir güzel kesiyoruz ne eklenti nede başka birşey kurmamıza gerek kalıyor.

Nginx Kullanıyorsanız Yapmanız gereken config dosyasına aşağıdaki satırları eklemek.Bu sayede sizlerde spamlardan kurtulabilirsiniz.

location ~* (wp-comments-posts|wp-login).php$ {
        if ($http_referer !~ ^(https://mertcangokgoz.com) ) {
          return 405;
        }
      }

Wordpress DMCA Sorununu Gidermek

Bilindiği gibi DMCA özgün içerik girişi yapılan sitelerin mutlaka kullanması gereken bir sistem ancak firmanın ciddiyetsizliği yüzünden benim canım 2 gündür sıkılmıştı yapmış oldukları wordpress eklentisinde gerek admin paneli gerekse eklentinin İD alamama durumu ve firmanın da eklentide sorun yok demesi üzerine bu makaleyi yazma gereği duydum hata alan arkadaşlar yada içeriklerinin sitede işlenmemesini giderebilirler

Öncelikle eklentiyi yükledikten sonra karşımıza admin panelinde “func_get_args()” syntax hatası karşımıza çıkacak eklentiyi yazarken ne düşünmüşler tam bilemiyorum bu syntax değişken tanımlamadan belli başlı yerlerde kullanılamaz işte o kullanılamayacak yerde bunlar kullanmış…

/wp-content/plugins/dmca-badge/libraries/sidecar/classes/ class-admin-page.php dosyasında 448.satıra bakınız

protected function _get_plugin_value( $method ) {
return call_user_func_array( array( $this, '_do_plugin_action' ), func_get_args() );
}

Aşağıdakiyle değiştir

protected function _get_plugin_value( $method ) {
$gethata1 = func_get_args();
return call_user_func_array( array( $this, '_do_plugin_action' ), $gethata1 );
}

yapılan syntax hatasını da giderdikten sonra geldik en büyük sıkıntıya konulara ID atanamaması ve DMCA.com sitesinde içeriklerin korumaya alınmaması sorununa aslında eklentide tasarım yada özellik değiştirmedik demişler ancak temiz kodlama yapacağız diyede unuttukları 1-2 kısmı da biz ekleyeceğiz…

Öncelikle yapmamız gereken DMCA.com sitesine girip sitenin bize vermiş olduğu badges embed kodlarını almak

Bize verilmiş olan kod satırları

<a href="http://www.dmca.com/Protection/Status.aspx?ID=557588e1-2f0a-451d-9d71-b825d1730ff2" title="DMCA"> <img src ="http://images.dmca.com/Badges/_dmca_premi_badge_1.png?ID=557588e1-2f0a-451d-9d71-b825d1730ff2"  alt="DMCA.com" /></a>

Sitenin bu kodu alması gerektiği yer ve sorun

dmcagorsel11-1

/wp-content/plugins/dmca-badge/classes/ class-plugin.php dosyasında 433.satıra bakınız

function the_settings_badges_tab() {
echo '<p>' . __( 'Select a DMCA Website Protection Badge by clicking on it.', 'dmca-badge' ) . '</p>';

$branding = __( 'Content Protection by DMCA.com', 'dmca-badge' );
$badge_template = <<<HTML
<a href="http://www.dmca.com/" title="{$branding}"><img src="{{badge_url}}" alt="{$branding}"></a>
HTML;
$badge_template = htmlentities( $badge_template );
echo "<pre style="display:none" id="badge-template">{$badge_template}</pre>";
echo $this->get_badges_html( $this->get_form_settings_value( 'badge', 'url' ) );
echo $this->get_form( 'badge' )->get_html();
}

görüldüğü gibi sayfa ve içeriklere DMCA embed kodu eklerken hiç bir yerden İD bilgisi almıyor.nHal böyle olunca da sayfalara koruma işlememiş oluyor.

Kodu aşağıdaki gibi değiştiriniz.biz burada değişken tanımlayarak sorunu çözeceğiz…

function the_settings_badges_tab() {
echo '<p>' . __( 'Select a DMCA Website Protection Badge by clicking on it.', 'dmca-badge' ) . '</p>';

$branding = __( 'Content Protection by DMCA.com', 'dmca-badge' );
$idpar1="DMCA Link bilginiz"
$idpar2="Resimlerin sonuna eklenecek olan İD"
$badge_template = <<<HTML
<a href="{$idpar1}" title="{$branding}"><img src="{{badge_url}}{$idpar2}" alt="{$branding}"></a>
HTML;
$badge_template = htmlentities( $badge_template );
echo "<pre style="display:none" id="badge-template">{$badge_template}</pre>";
echo $this->get_badges_html( $this->get_form_settings_value( 'badge', 'url' ) );
echo $this->get_form( 'badge' )->get_html();
}

Örnek olarak

$idpar1="http://www.dmca.com/Protection/Status.aspx?ID=557588e1-2f0a-451d-9d71-b825d1730ff2"
$idpar2="?ID=557588e1-2f0a-451d-9d71-b825d1730ff2"

yapıp kayıt edip çıkıyoruz cache eklentisi kullanıyorsak cacheyi yeniliyoruz.işlemimiz sonuçlanıyor…