Intereting Posts
функция для удаления комментариев и трекбэков закрыта ' Переопределение функции в wordpress Создание и установка шаблонов для пользовательских таксономий Вставить поля адреса в функцию Проблема с попыткой отобразить заголовок в сообщениях Как показывать категорию как дерево в настройке функция query_posts отключает класс current_page_menu Лучше сделать новый wp_query или только модифицировать основной запрос каждый раз? Плагин для водорослей не работает WordPress Jquery Confliction с плагином Изменить порядок сообщений Ограничьте пользователя условиями в пользовательской таксономии, зарегистрированной как для должностей, так и для пользователей Все страницы загружают главную страницу, если используются довольно постоянные ссылки Есть ли плагин или простой способ добавить метабокс с несколькими изображениями в сообщение? Удалить ссылки меню администратора для нескольких пользователей по электронной почте

Создание пользовательского вывода для страницы / URL-адреса в плагине

В моем плагине я хочу иметь возможность поймать slug – скажем «testpath», как в www.mysite.com/testpath, и выводить все, что я хочу, из своего плагина на страницу.

Я в WP Admin могу создать страницу под названием «testpath» и поместить в нее короткий код (скажем, [testpath]), который затем реализуется плагином, но я не хочу, чтобы пользователь плагина имел создайте эту страницу и введите короткий код – все это должно обрабатываться плагином.

Я также могу создать сообщение программно при активации плагина, а затем перехватить его в плагине, например

 function create_custom_page($page_name) { $pages = get_pages(); foreach ($pages as $page) { if ($page->post_name == $page_name) return; } wp_insert_post ([ 'post_type' =>'page', 'post_name' => $page_name, 'post_status' => 'publish', ]); } 

А потом:

 add_filter( 'page_template', 'add_test_template' ); function add_test_template( $page_template ) { if ( is_page( 'testpath' ) ) { $page_template = __DIR__.'/testpath.html'; } return $page_template; } 

Это работает так, как я хочу – но это кажется очень глупым. Я думаю что-то с Rewrite API, или подходящие действия могут быть лучшим способом. Существуют ли какие-либо стандартные (или умные) подходы к этому?

Solutions Collecting From Web of "Создание пользовательского вывода для страницы / URL-адреса в плагине"

 <?php /* Plugin Name: Custom output Description: A module to test the custom output. To test: http://your_wordpress_site.com/customop_uri_path Version: 1.0 Author: Danilo Silva Author URI: http://danilocgsilva.me */ // Write a new permalink entry on code activation register_activation_hook( __FILE__, 'customop_activation' ); function customop_activation() { customop_custom_output(); flush_rewrite_rules(); // Update the permalink entries in the database, so the permalink structure needn't be redone every page load } // If the plugin is deactivated, clean the permalink structure register_deactivation_hook( __FILE__, 'customop_deactivation' ); function customop_deactivation() { flush_rewrite_rules(); } // And now, the code that do the magic!!! // This code create a new permalink entry add_action( 'init', 'customop_custom_output' ); function customop_custom_output() { add_rewrite_tag( '%customop_uri_path%', '([^/]+)' ); add_permastruct( 'customop_uri_path', '/%customop_uri_path%' ); } // The following controls the output content add_action( 'template_redirect', 'customop_display' ); function customop_display() { if ($query_var = get_query_var('customop_uri_path')) { header("Content-Type: text/plain"); echo 'This is my custom content!!!!'; exit; // Don't forget the exit. If so, WordPress will continue executing the template rendering and will not fing anything, throwing the 'not found page' } } 

Создайте плагин с этим точным кодом. Активируйте плагин и введите тестовый ввод в браузере http://your_wordpress_site.com/customop_uri_path .

Функции регистров связаны с структурой permalink и выполняются как раз в активации плагина, так и при отключении плагина (для очистки записей постоянных ссылок, если вы больше не используете плагин).

Настоящая магия выполняется с помощью следующего кода. Существуют две функции: одна используется в активации плагина для создания нового правила перезаписи и добавления записи постоянной ссылки, а другая – для отображения вывода. Функция get_query_var сканирует аргументы uri, если вы создали свой собственный путь uri, созданный ранее. Если это так, то он выполняет код для записи вашего пользовательского вывода. НЕ ЗАБУДЬТЕ ОКОНЧАТЕЛЬНЫЙ ВЫХОД, иначе он попадет на страницу не найденного контента.

Сканирует любое вхождение «customop_uri_path» в коде, чтобы настроить собственный адрес uri вашего пользовательского вывода. Честно говоря, я до сих пор не понял, что происходит в аргументах add_rewrite_tag и add_permastruct . Итак, просто замените свой собственный путь uri.

Кроме того, убедитесь, что ваш модуль перезаписи apache работает правильно, и ваша установка WordPress настроена на использование постоянных ссылок или вы не увидите, что модуль работает.