2013-10-13 2 views
0

Я пишу плагин, и у меня возникают трудности с тем, когда запускать определенные функции кода плагина.WordPress Plugin Event Call Before Shortcode

/* 
// Plugin information goes here 
*/ 


// ***** Area A 

$GLOBALS['example_class'] = new example_class; 

class example_class { 

    // ***** Area B 

    public function admin_init() { 
     add_menu_page(

      // ... 

     ); 
    } // End of admin_init function 
} // End of example class 

add_action('init', function() { 
    global $example_class; 

    // ***** Area C 

    if (??????) { 

     // Sanitize and set the view role 
     $view = (isset($_REQUEST['view'])) ? sanitize_key($_REQUEST['ex']) : 'get_all'; 
     // Manage submitted data 
     switch ($view) { 

      // ... 

     } // End of switch for view 

     // Sanitize and set the action role 
     $action = (isset($_REQUEST['action'])) ? sanitize_key($_REQUEST['action']) : NULL; 
     // Manage submitted data 
     switch ($action) { 

      //... 

     } // End of switch for action 

    } // End of if page is being shown 
}); 

add_action('admin_menu', function() { 
    global $example_class; 
    $example_class->admin_init(); 
}); 

add_shortcode('show_public_random', function() { 
    global $example_class; 
    // ... 
}); 

Согласно предложил in a previous post на stackexchange, я отделил стороне контроллера моего плагина в функции, вызываемой этим init событием. Тем не менее, я не хочу, чтобы код, содержащийся в функции события init, оценивался при каждой загрузке страницы - я хочу, чтобы мой код оценивался только при загрузке страницы, содержащей короткий код.

Я попытался загрузить переменную класса boolean, которая инициализируется как ложь, но заменена на true из функции add_shortcode, но к тому времени уже слишком поздно - произошло событие init, а содержимое функции не запущено.

Пожалуйста, помогите мне - какое выражение следует использовать в Области C моего кода? Что я должен проверить, чтобы гарантировать, что функция события init запускается только при использовании короткого кода?

+0

Что вы хотите проверить? – codepixlabs

+0

'init'means первое, что будет выполнено, ни одно из ваших условий не будет работать до этого. Вероятно, вам стоит попробовать подключить свою функцию другим крюком apt – codepixlabs

+0

Мне нужно запустить условные обозначения на основе действий и взглядов, чтобы решить, что показывать на странице, поэтому подходящий крючок, который я выбираю, должен быть до того, как вызывается короткий код. –

ответ

0

Я нашел ответ, хотя и беспорядочный.

/* 
// Plugin information goes here 
*/ 
$GLOBALS['example_class'] = new example_class; 

class example_class { 

    var $public_loaded = false, 
     $content = ''; 

    public function admin_init() { 
     add_menu_page(
      // ... 
     ); 
    } // End of admin_init function 

    public function get_random() { 
     // ... 
    } 
} // End of example class 

add_action('init', function() { 
    global $example_class; 

    // ***** Area A 
    // Check for arbitrary variable sent with every user interaction 
    if (if (isset(sanitize_key($_REQUEST['tni']))) { 

     // ***** Area B 
     /* Set the class variable `public_loaded` to true after it's 
     * clear we're loading a public page which uses our plugin */ 
     $example_class->public_loaded = true; 

     // Sanitize and set the action role 
     $action = (isset($_REQUEST['action'])) ? sanitize_key($_REQUEST['action']) : NULL; 
     // Manage submitted data 
     switch ($action) { 
      // ... 
     } // End of switch for action 

     // Sanitize and set the view role 
     $view = (isset($_REQUEST['view'])) ? sanitize_key($_REQUEST['ex']) : 'get_all'; 
     // Manage submitted data 
     switch ($view) { 
      // ... Generate content and store in $this->content 
     } // End of switch for view 
    } // End of if page is being shown 
}); 

add_action('admin_menu', function() { 
    global $example_class; 
    $example_class->admin_init(); 
}); 

add_shortcode('show_public_random', function() { 
    global $example_class; 
    // ***** Area C 
    /* Check to see if page has loaded using the telltale sign 
    * If not, load a default view - a random post */ 
    if ($example_class->public_loaded === false) { 
     $example_class->content = $example_class->get_random(); 
     // ... 
    } 

    // Return the generated content 
    return $example_class->content; 
}); 

В зоне А я установил квалификационный заявление, чтобы увидеть, если пользователь представил переменную вместе с их взаимодействием с моим плагином. Если плагин мой, код оценивается, и оцениваются action и view. Кроме того, функция установит переменную класса public_loaded в значение true.

В области C Я установил квалификационный оператор, чтобы узнать, была ли переменная класса установлена ​​в true; если нет, для короткого кода устанавливается представление по умолчанию.

Смежные вопросы