Intereting Posts
WordPress Multisite Network и вопросы разработчика Добавить пользовательское поле для публикации с некоторой частью URL-адреса в качестве значения где код, который выполняет иерархию шаблонов? Добавление пользовательской таксономии в мой существующий URL-адрес категории SSL-сертификат разбивает CSS (в сочетании с W3TC) (FIXED) Запуск WordPress как пользователя FTP? моя тема нарушает экспорт WP Постоянная ссылка: Пользовательские URL-адреса t5-fresh-editor-stylesheets.php разбивает размещение изображений в редакторе WP Beta 3 Как искать с помощью ajax для точной фразы или слов в поле ввода? Получить XAMPP для автоматического перенаправления на мой сайт WooCommerce: удалить данные образца и фиктивных данных Как отключить (или удалить) «Все сообщения, опубликованные и корзины» в сообщениях панели мониторинга Запрос из другой базы данных, кроме значения по умолчанию Примените два разных стиля к Wiget Titles вместе с декоративной линией

Динамический URL-адрес, а не физическая страница в базе данных

Зная, как WordPress по существу обрабатывает запросы по страницам (через index.php и .htaccess), я пытаюсь найти лучший способ «игнорировать» определенную структуру permalink или переписать ее таким образом, чтобы я мог использовать шаблон или (созданный мной) для обработки этих уникальных запросов.

Что я делаю, создается плагин, который обрабатывает данные по недвижимости RETS, но не в интерфейсе WordPress. Мой плагин создает новую таблицу в базе данных и использует внешние задания Cron для обновления. Таким образом, я могу использовать стандартные функции $wpdb , но я не ограничен wp_posts и wp_postmeta … поскольку я боюсь, что это вызовет слишком много раздувания.

Я бы хотел представить свои собственные страницы в следующих местах:

http://www.mywebsite.com/properties – это будет карта google http://www.mywebsite.com/properties/home-for-sale-in- {sacramento} / {123456}

В приведенном выше сценарии аспекты URL- parse_url , которые завернуты в фигурные скобки, будут извлекаться с помощью parse_url а затем использоваться для запроса базы данных для соответствующего свойства.

Очевидно, мне понадобится WP, чтобы либо игнорировать /properties* либо использовать Rewrite API , который я бы скорее сделал …

Могу ли я получить некоторую помощь в этом отношении? Я рад опубликовать дополнительную информацию, если это необходимо.

Solutions Collecting From Web of "Динамический URL-адрес, а не физическая страница в базе данных"

add_rewrite_rule может помочь вам обнюхать запрос и позволить вам обрабатывать его, как вы хотите.

 if( ! class_exists('PropertiesEndpoint')): class PropertiesEndpoint { // WordPress hooks public function init() { add_filter('query_vars', array($this, 'add_query_vars'), 0); add_action('parse_request', array($this, 'sniff_requests'), 0); add_action('init', array($this, 'add_endpoint'), 0); } // Add public query vars public function add_query_vars($vars) { $vars[] = '__properties'; $vars[] = 'city'; $vars[] = 'id'; return $vars; } // Add API Endpoint public function add_endpoint() { add_rewrite_rule('^properties/([^/]*)/([^/]*)/?', 'index.php?__properties=1&city=$matches[1]&id=$matches[2]', 'top'); add_rewrite_rule('^properties/?', 'index.php?__properties=1', 'top'); flush_rewrite_rules(false); //// <---------- REMOVE THIS WHEN DONE } // Sniff Requests public function sniff_requests($wp_query) { global $wp; if(isset($wp->query_vars[ '__properties' ])) { if(isset($wp->query_vars[ 'city' ]) && isset($wp->query_vars[ 'id' ])) { $this->handle_request__properties_home_for_sale(); die(); // stop default WP behavior } else if( isset($wp->query_vars[ 'city' ]) ) { // handle in separate file require_once get_template_directory() . '/single-properties-in-city.php'; die(); // stop default WP behavior } $this->handle_request__properties(); // continue default WP behavior } } // Handle Requests protected function handle_request__properties_home_for_sale() { global $wp; $city = $wp->query_vars[ 'city' ]; $id = $wp->query_vars[ 'id' ]; ?>SHOW PROPERTY IN <?php echo $city . ' - ' . $id; } protected function handle_request__properties() { // Control the template used add_filter('template_include', function ($original_template) { // change the default template to a google map template return get_template_directory() . '/single-properties-google-map.php'; }); } } $propEPT = new PropertiesEndpoint(); $propEPT->init(); endif; // PropertiesEndpoint 

Monkeyman Rewrite Analyzer может помочь вам убедиться, что ваши конечные точки функционируют должным образом.


ОБНОВИТЬ

Я добавил несколько способов обработки запроса. Вы можете игнорировать поведение WP по умолчанию, убив процесс с помощью die() после его обработки. Или настройте шаблон и продолжите поведение по умолчанию с помощью фильтра template_include .