web-dev-qa-db-fra.com

Comment puis-je obtenir la structure permalien de fonctionner comme ça?

domain.com/rents/miami-dade/

domain.com/companies/miami-dade/

Ensuite, pour, par exemple, loyers/miami-dade /, je passerais en revue différentes zones de miami, en affichant une liste des loyers pour chaque zone. Par exemple:

domain.com/rents/miami-dade/

rendrait quelque chose comme ceci en parcourant les zones de Miami:

North Miami Beach

  • table des loyers

Hialeah

  • table des loyers

Cutler Ridge

  • table des loyers

J'aurais besoin de reproduire exactement la même séquence pour un objet différent, "sociétés".

domain.com/companies/miami-dade/

rendrait quelque chose comme ceci en parcourant les zones de Miami:

North Miami Beach

  • tableau des entreprises

Hialeah

  • tableau des entreprises

Cutler Ridge

  • tableau des entreprises

Comment pourrais-je organiser quelque chose comme ça? J'ai déjà créé un type de poste d'entreprise et créé des taxonomies pour les comtés et les villes.

Je suis déjà capable de voir la propre page d'une taxomonie, mais cela ne se limite pas à un certain type de message, ce qui n'est pas ce dont j'ai besoin. Je dois url ressembler à quelque chose comme ce que j'ai montré ici.

Merci d'avance!

1
ninja08

Vous pouvez accomplir cela avec add_rewrite_rule() .

Personnellement, j'aime montrer cet exemple à une classe pour qu'elle soit prête à copier/coller. Vous pouvez lancer ceci dans un plugin ou dans functions.php - un endroit qui charge ce code avant query_vars, parse_request et init.

L'objectif est d'ajouter des règles de réécriture, assurez-vous de pouvoir ajouter des propriétés personnalisées à la requête principale, puis remplacez le modèle par défaut à charger avec votre modèle personnalisé.

if (!class_exists('RentsAndCompaniesRewrite')):

    class RentsAndCompaniesRewrite
    {
        // 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[] = 'show_companies';
            $vars[] = 'show_rents';
            $vars[] = 'location';

            return $vars;
        }

        // Add API Endpoint

        public function add_endpoint()
        {
            add_rewrite_rule('^rents/([^/]*)/?', 'index.php?show_rents=1&location=$matches[1]', 'top');
            add_rewrite_rule('^companies/([^/]*)/?', 'index.php?show_companies=1&location=$matches[1]', 'top');

            flush_rewrite_rules(false); //// <---------- REMOVE THIS WHEN DONE TESTING
        }

        // Sniff Requests

        public function sniff_requests($wp_query) {
            global $wp;

            if ( isset( $wp->query_vars[ 'show_rents' ], $wp->query_vars[ 'location' ] ) ) {

                $this->handle_request_show_rents();

            } else if ( isset( $wp->query_vars[ 'show_companies' ], $wp->query_vars[ 'location' ] ) ) {

                $this->handle_request_show_companies();
            }
        }

        // Handle Requests

        protected function handle_request_show_rents()
        {
            add_filter('template_include', function ($original_template) {

                return get_stylesheet_directory() . '/templates/rents_by_location.php';
            });
        }

        protected function handle_request_show_companies()
        {
            add_filter('template_include', function ($original_template) {

                return get_stylesheet_directory() . '/templates/companies_by_location.php';
            });
        }
    }

    $wptept = new RentsAndCompaniesRewrite();
    $wptept->init();

endif; // RentsAndCompaniesRewrite

Dans un répertoire de votre thème, ajoutez les modèles que vous utiliserez lors du traitement de la demande.

/templates/companies_by_location.php

<?php

global $wp;
$location = $wp->query_vars[ 'location' ];

echo 'Companies in the ' . $location . ' area:';

/templates/rents_by_location.php

<?php

global $wp;
$location = $wp->query_vars[ 'location' ];

echo 'Rents in the ' . $location . ' area:';
2
jgraup

Ok, j'ai quelques idées de base. Vous pouvez installer un plugin appelé Redirection. Et après cela, vous pouvez faire comme et rediriger vers d'autres pages avec vos propres données.

mais l'URL changera à mesure que la personne redirige vers l'autre page spécifique.

Maintenant, si vous voulez qu'ils atterrissent sur une page spécifique ... vous devez créer le dossier dans le répertoire du serveur situé sous le site principal et dans son fichier contenant le fichier index.php ou index.html. Exemple: Allez à Cpanel et au gestionnaire de fichiers goto >> créez le nom du dossier si vous le souhaitez, pour "domain.com/companies/miami-dade/", créez un dossier "sociétés", puis le sous-dossier "miami-dude". Notez que chaque dossier doit contenir le fichier index.html ou cela ne fonctionnera pas. Remarque: cette astuce ne copie pas votre thème, sinon vous devez créer une page HTML entière et l'enregistrer en tant qu'index.html.

J'espère que cela pourra vous aider :-)

1
Prashant Gupta