2009-10-23 15 views
8

Bir Wordpress temasına yaptığım bir eklentiden bazı işlevler eklemeye çalışıyorum ama küçük bir zevk yaşıyorum. Dokümantasyon problemi çözmeme gerçekten yardımcı olmuyor, belki de burada birileri yardım edebilir.WordPress: Bir Temadan Bir Eklentinin İşlevine Erişme

Wordpress'te etkin ve çalışır durumda bir eklentim var. Bu eklentinin sınıfı bir Wordpress Teması'ndan erişmek istediğim generateHtml adlı bir fonksiyona sahiptir. Ama ne olursa olsun, eklentimin koduna erişemiyorum.

Eklenti:

<?php 
/** Usual comments here **/ 

if (!class_exists("ImageRotator")) { 
    class ImageRotator { 
    private $uploadPath = ''; 
    private $pluginPath = ''; 
    private $options; 

    function __construct() { 
     $this->uploadPath = dirname(__file__).'\\uploads\\'; 
     // add_shortcode('imagerotator', array(&$this, 'generateHtml')); 
    } 

    // Various functions for plugin 

    function generateHtml() { 
     echo '<p>Hello World</p>'; 
    } 
    } 
} 

/** 
* Create instance of image rotator 
*/ 
$imageRotator = new ImageRotator(); 

/** 
* Create actions & filters for Wordpress 
*/ 
if (isset($imageRotator)) { 
    // Actions 
    add_action('admin_menu', array(&$imageRotator, 'createMenu')); 
    add_action('admin_init', array(&$imageRotator, 'registerSettings')); 
    add_action('imagerotator_show', array(&$imageRotator, 'generateHtml')); 
} 

bana bir eklentisinden bir tema erişimde bulunan kod almak ve/veya benim kodunda yanlış gidiyorum orada işaret etmek ne yapmaları gerektiğini bir özetini verebilir ya tema başlığı sayfasından

Porsiyon:

<?php if (isset($imageRotator)) { 
     $imageRotator->generateHtml(); 
    } else if (isset($ImageRotator)) { 
     print_r($ImageRotator); 
    } else { 
     echo '<p>Nope!</p>'; 
    } 

    if (function_exists("imagerotator_show")) { 
     echo 'Function found'; 
    } else { 
     echo 'Function NOT found'; 
    } 
?> 

Şu şimdiye kadar gördüğüm "Hayır" ve "bulunamadı dEĞİL Fonksiyonu" dir. Herhangi bir girdi için teşekkürler.

Lee başlayanlar için

+0

Bir yan not olarak, bu tüm wordpress tema tasarımcıları için yararlı olacaktır: http://devideas.blogetery.com/testing-wordpress-themes-easily/ – Sarfraz

cevap

6

, "imagerotator_show" bir işlev değil; Bir tür eylemin adı. Add_action() işlevini kullandığınızda, Wordpress, yönteminizi belirli bir eylem tetiklendiğinde çağırılacak işlevler/yöntemler listesine ekler. Böylece ikinci testiniz her zaman 'Fonksiyon DEĞİL' ile cevap verecektir.

İlk sorunun en olası nedeni, genel yöntem olarak aramak istediğiniz yöntemi bildirmekte başarısız oluyor. Kodu da olması gerekenden daha zor hale getiriyorsun. Bu sınıf bunun uygulanması tüm özel detayları saklamanızı sağlar

if (! class_exists('Foo')): 
    class Foo { 
    function __construct() { 
     add_action('hook_name', array(&$this, 'my_hook_implementation')); 
    } 

    function my_hook_implementation() { 
     // does something 
    } 

    public function my_special_method() { 
     // does something else 
    } 
    } 

if (class_exists('Foo')): 
    $MyFoo = new Foo(); 

:

Ben yöntemleri bildirmek ve bir sınıftan kanca tescili için gördüğüm en iyi uygulama şuna benzer. siz) (my_special_method çağırmak gerektiğinde aşağıdaki gibi, bunu yapmak:

$MyFoo->my_special_method(); 
+0

Girdiğiniz için teşekkürler. Ben bir atış –

+0

vereceğim Merak ediyorum neden bu $ 4 satırda referans ile geçti. Ben WordPress eklentileri için OO formu kullanıyorum yeni. – Andrew

1

@ Andrew ben senin yan soruya cevap düşündüm yorum yapamam çünkü. Bkz: bir nesneden bir geri çağırma işlevi tanımlarken dizi işlevi kullanmak zorunda olduğunu açıklanmıştır

http://net.tutsplus.com/tutorials/wordpress/create-wordpress-plugins-with-oop-techniques/

. Temel olarak "my_hook_implementation" işlevini $ nesnesinden al ve add action hooku için callback parametresi olarak kullan. Bunun nedeni, işlevi nesnenin kapsamı içinde tanımlamanız ve PHP'nin söz konusu işlevin ne olduğunu bilmesi için kapsamı tanımlamanız gerektiğidir. Bu değişken, değişken tarafından belirtilen nesnenin kapsamıdır.

İlgili konular