Intereting Posts

Идентификация страницы, содержащей короткий код в `init`

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

/* // 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; // ... }); 

Как было предложено в предыдущем посте , я отделил сторону контроллера моего плагина от функции, вызванной событием init . Тем не менее, я не хочу, чтобы код, содержащийся в функции события init оценивался при каждой загрузке страницы – я хочу, чтобы мой код оценивался только при загрузке страницы, содержащей короткий код.

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

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

Solutions Collecting From Web of "Идентификация страницы, содержащей короткий код в `init`"

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

 /* // 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; }); 

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

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