Dynamische URL, keine physische Seite innerhalb der database

Da ich weiß, wie WordPress im Wesentlichen Seitenanforderungen verarbeitet (über index.php und .htaccess), versuche ich herauszufinden, wie ich eine bestimmte Permalink-Struktur am besten “ignoriere”, oder schreibe sie so um, dass ich eine Vorlage verwenden kann Plugin-Skript (erstellt von mir), um diese einzigartigen Anfragen zu bearbeiten.

Was ich mache, ist ein Plugin zu erstellen, das RETS-Immobiliendaten verarbeitet, aber nicht innerhalb der WordPress-Oberfläche. Mein Plugin erstellt eine neue Tabelle innerhalb der database und verwendet externe Cron-Jobs, um sich selbst zu aktualisieren. Auf diese Weise kann ich die Standardfunktionen von $wpdb verwenden, aber ich bin nicht auf die Tabellen wp_posts und wp_postmeta … da ich befürchte, dass dies zu viel wp_postmeta verursachen würde.

Ich möchte meine eigenen Seiten an folgenden Orten vorstellen:

http://www.mywebsite.com/properties – das wäre eine Google Map http://www.mywebsite.com/properties/home-for-sale-in- {sacramento} / {123456}

Im obigen Szenario werden die Aspekte der URL, die in geschweifte Klammern eingeschlossen sind, mit parse_url extrahiert und anschließend zum Abfragen der database nach der entsprechenden Eigenschaft verwendet.

Offensichtlich müsste ich für WP entweder /properties* ignorieren oder die Rewrite API , was ich lieber tun würde …

Könnte ich in dieser Hinsicht Hilfe bekommen? Ich freue mich, wenn nötig weitere Informationen zu veröffentlichen.

Solutions Collecting From Web of "Dynamische URL, keine physische Seite innerhalb der database"

add_rewrite_rule kann Ihnen dabei helfen, die Anfrage zu schnüffeln und sie so zu behandeln, wie Sie es wollen.

 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 

Mit dem Monkeyman Rewrite Analyzer können Sie sicherstellen, dass Ihre Endpunkte ordnungsgemäß funktionieren.


AKTUALISIEREN

Ich habe einige Möglichkeiten hinzugefügt, um die Anfrage zu bearbeiten. Sie können das Standard-WP-Verhalten ignorieren, indem Sie den process mit der function die() beenden, nachdem Sie damit fertig geworden sind. Oder passen Sie die Vorlage an und setzen Sie das Standardverhalten mit dem Filter template_include fort .