Tema ve Eklenti Kısa Kod Çakışmalarından Nasıl Kaçınılır


Hepimiz bunu deneyimledik: gerçekten harika bir premium tema satın alıyorsunuz ve aynı zamanda harika bir eklenti de satın alıyorsunuz (örneğin benimkilerden biri!) ancak temayı ve eklentiyi bir araya getirmek hiç işe yaramıyor. Ne olmuş? Eklentide veya temada hatalar mı var?

Çoğu zaman bu durum kısa kodları kullandığınızda gerçekleşir. "Referansları" yönetmek için yeni bir eklenti satın aldığınızı hayal edelim. Belgeleri dikkatlice okudunuz ve referansları görüntülemek için aşağıdaki [referanslar] kısa kodunu eklemeniz gerektiğini biliyorsunuz. Ancak bunu yaptığınızda hiçbir şey görünmüyor.

Kısa kodun referanslarla değiştirilmemesinin nedeni, temanızın VE eklentinin aynı kısa kodu tanımlamasıdır.

Eklenti dosyaları tema dosyalarından önce yüklendiğinden bunların üzerine yazılır ve bu durumda tam olarak dikkate alınmaz.

Bu yüzden size tema kısa kodunun kaydını silmek ve onu eklentininkiyle değiştirmek için basit bir yöntem göstermek istedim.

Adım 1: Basit Bir Eklenti Oluşturun

Basit bir eklenti oluşturmamız gerekiyor:

<?php
/*
Plugin Name: Avoid Shortcodes conflicts
Plugin URL: http://remicorson.com
Description: A little plugin to avoid conflicts bewteen shortcodes
Version: 1.0
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
Text Domain: rc_asc
Domain Path: languages
*/

Adım 2: Kısa Kodun Var Olup Olmadığını Kontrol Edin

Bu en önemli adım. Kısa kodun varlığını kontrol ettiğiniz yer burasıdır. WordPress, kayıtlı tüm kısa kodların listesini saklayan bir “$shortcode_tags” global değişkenine sahiptir. Bu nedenle, bu değişkenin üzerinden geçmemiz ve aradığımız kısa kodun bunun bir parçası olup olmadığını kontrol etmemiz gerekiyor.

/**
 * Check if a shortcode is already registered
 *
 * @since 1.0
 *
 * @param $shortcode string The shortcode slug to test
 *
 * @return void
 */
function rc_asc_shortcode_exists( $shortcode = false ) {
	
	global $shortcode_tags;

	//echo '<pre>'; var_dump($shortcode_tags); echo '</pre>';
 
	if ( ! $shortcode )
		return false;
 
	if ( array_key_exists( $shortcode, $shortcode_tags ) )
		return true;
 
	return false;

}

Bu, aranacak kısa kod bilgisi de dahil olmak üzere daha spesifik bir fonksiyonda kullanacağımız genel fonksiyondur. Bu işlev, kısa kod varsa TRUE'yu, yoksa FALSE'ı döndürür.

3. Adım: Kısa Kodu Kaldır ve Yenisini Kaydedin

Bir sonraki işlev, az önce oluşturduğumuz rc_asc_shortcode_exists() işlevini kullanmaktır. Basitçe kısa kodun varlığını kontrol eder, varsa değiştirir veya henüz kayıtlı değilse kısa kodu ekler.

/**
 * Check if a shortcode is already registered and replace it
 *
 * @since 1.0
 *
 * @return void
 */
function rc_asc_replace_shortcode() {

	$shortcode = 'testimonials';
	
	if( rc_asc_shortcode_exists( $shortcode ) ) {
		remove_shortcode( $shortcode );
		add_shortcode( $shortcode, 'my_testimonials_function' );
	} else {
		add_shortcode( $shortcode, 'my_testimonials_function' );
	}
}

Adım 4: Yeni Kısa Kod İşlevini Tanımlayın

Tek yapmanız gereken “my_testimonials_shortcode()” fonksiyonunun içeriğini tanımlamaktır ve işlem tamamdır!

/**
 * Creates the new shortcode
 *
 * @since 1.0
 *
 * @return void
 */
function my_testimonials_function() {

	return 'this replaces the previous shortcode!';
}

Gördüğünüz gibi daha önce bildirilen kısa kodun yerini artık doğru kısa kod almıştır.