2009-10-23 21 views
8

मैं एक वर्डप्रेस थीम में बनाई गई प्लगइन से कुछ कार्यक्षमता जोड़ने की कोशिश कर रहा हूं लेकिन मुझे बहुत खुशी है। दस्तावेज़ीकरण वास्तव में समस्या को हल करने में मेरी सहायता नहीं करता है, इसलिए शायद यहां कोई मदद कर सकता है।वर्डप्रेस: ​​एक थीम से एक प्लगइन के फ़ंक्शन तक पहुंच

मेरे पास वर्डप्रेस में एक प्लगइन है जो सक्रिय है और ठीक काम कर रहा है। इस प्लगइन के लिए क्लास में जेनरेट एचटीएमएल नामक एक फ़ंक्शन है जिसे मैं वर्डप्रेस थीम से एक्सेस करना चाहता हूं। लेकिन जो भी मैं कोशिश करता हूं, मैं अपने प्लगइन के कोड तक नहीं पहुंच पा रहा हूं।

प्लगइन:

<?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')); 
} 

या तो मुझे क्या मैं वहाँ का कहना है कि मैं अपने कोड में गलत जा रहा हूँ एक प्लग-इन से विषय एक्सेस कोड प्राप्त और/या करने के लिए क्या करने की जरूरत का एक सारांश दे सकते हैं विषय हैडर पेज से

भाग:

<?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'; 
    } 
?> 

वर्तमान में सभी मैं कभी भी देख "नहीं" और "फ़ंक्शन नहीं मिला है।" किसी भी इनपुट के लिए धन्यवाद।

ली,

+0

एक साइड नोट के रूप में, यह सभी WordPress थीम डिजाइनरों के लिए सहायक होना चाहिए: http://devideas.blogetery.com/testing-wordpress-themes-easily/ – Sarfraz

उत्तर

6

शुरुआत के लिए, "imagerotator_show" एक समारोह नहीं है, यह एक प्रकार की कार्रवाई का नाम है। जब आप add_action() फ़ंक्शन का उपयोग करते हैं, तो Wordpress आपके कार्य को किसी विशेष क्रिया को ट्रिगर होने पर कॉल करने के लिए फ़ंक्शंस/विधियों की सूची में जोड़ता है। इस प्रकार आपका दूसरा परीक्षण हमेशा 'फंक्शन नहीं मिला' के साथ जवाब देगा।

पहली समस्या का सबसे संभावित कारण उस विधि को घोषित करने में असफल रहा है जिसे आप सार्वजनिक विधि के रूप में कॉल करना चाहते हैं। आप इसे कोड की तुलना में कठिन बना रहे हैं।

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(); 

यह अपनी कक्षा इसके कार्यान्वयन के सभी निजी विवरण रखने के लिए अनुमति देता है:

सबसे अच्छा अभ्यास मैं तरीकों की घोषणा और एक वर्ग से हुक पंजीकरण के लिए देखा है कुछ इस तरह लग रहा है। जब आप my_special_method कॉल करने के लिए() की जरूरत है, आप यह कर इस प्रकार है:

$MyFoo->my_special_method(); 
+0

इनपुट के लिए धन्यवाद। मैं इसे एक शॉट –

+0

दूंगा, मैं उत्सुक हूं कि आपने लाइन 4 पर संदर्भ के द्वारा '$' क्यों पारित किया है। मैं वर्डप्रेस प्लगइन के लिए ओओ फॉर्म का उपयोग करने के लिए नया हूं। – Andrew

1

@andrew के बाद से मैं टिप्पणी नहीं कर सकता मैंने सोचा कि मैं अपने सहायक सवाल का जवाब होगा। देखें:

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

यह कहाँ से समझाया गया है आप सरणी समारोह का उपयोग करना होगा जब एक वस्तु से एक कॉलबैक फ़ंक्शन को परिभाषित। यह मूल रूप से यह कह रहा है कि यह ऑब्जेक्ट $ से 'my_hook_implementation' फ़ंक्शन प्राप्त करें और इसे एक्शन एक्शन हुक में कॉलबैक पैरामीटर के रूप में उपयोग करें। ऐसा इसलिए है क्योंकि आपने ऑब्जेक्ट के दायरे में फ़ंक्शन को परिभाषित किया है और PHP को यह जानने के लिए कि आप किस फ़ंक्शन के बारे में बात कर रहे हैं, आपको दायरे को परिभाषित करना होगा। ऑब्जेक्ट होने का दायरा इस परिवर्तनीय $ द्वारा संदर्भित है।

संबंधित मुद्दे