2009-10-23 5 views
8

Wordpress 테마로 만든 플러그인에서 몇 가지 기능을 추가하려고하지만 약간의 기쁨이 있습니다. 설명서는 문제를 해결하는 데 도움이되지 않으므로 여기 누군가가 도움이 될 것입니다.Wordpress : A의 테마에서 플러그인의 기능에 액세스하기

나는 워드 프레스에서 활성화되어 잘 작동하는 플러그인이 있습니다. 이 플러그인을위한 클래스는 Wordpress Theme에서 접근하고자하는 generateHtml이라는 함수를 가지고 있습니다. 그러나 무엇을 시도하든 플러그인 코드에 액세스 할 수없는 것 같습니다.

플러그인 :

<?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

나는 왜 당신이'$ this'을 4 행에 참조로 전달했는지 궁금하다. 나는 WordPress 플러그인에 OO 양식을 처음 사용하고있다. – Andrew

1

앤드류를 나는 내가 당신의 부수적 인 질문에 대답 할 생각 언급 할 수 있기 때문이다. 참조 : 객체에서 콜백 함수를 정의 할 때 배열 기능을 사용한다는 것을 설명

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

. 이것은 기본적으로 $ this라는 객체에서 'my_hook_implementation'함수를 가져와 add 액션 훅에 대한 콜백 매개 변수로 사용하는 것입니다. 그것은 당신이 객체의 범위 내에서 함수를 정의했기 때문에 당신이 말하는 기능을 PHP가 알 수 있도록 범위를 정의해야하기 때문입니다. 변수 $ this가 참조하는 객체 인 범위입니다.

관련 문제