Добавить несколько пользовательских типов записей в URL - PullRequest
0 голосов
/ 09 ноября 2018

Я создал сайт на WordPress, чтобы люди могли арендовать автомобили у брокеров. Итак, у меня есть 2 пользовательских типа сообщений:

  • брокер
  • машина

На сайте около 10 разных автомобилей. Все эти машины одинаковы для каждого брокера.

Итак, я создал шаблон страницы page-brokers.php, в котором перечислены все брокеры. Если вы нажимаете на брокера, вы переходите на страницу сведений о брокере single-broker.php

URL-адрес saferental.be/broker/broker-name

На странице сведений о брокере вы увидите все машины 10 different. Если вы нажмете на автомобиль, вы перейдете на страницу сведений об автомобиле, которая называется single-car.php

URL-адрес saferental.be/car/car-name

В нижней части страницы сведений об автомобиле находится форма для связи с выбранным ранее брокером. Как видно из URL, ничего не сказано о выбранном брокере.

Когда вы выбираете брокера, его информация сохраняется в сеансе и помещается в скрытые поля формы.

Все отлично работает: - Вы выбираете брокера - Вы выбираете автомобиль -> перейти на страницу сведений об автомобиле - Отправьте форму страницы сведений об автомобиле, которая отправит информацию выбранному брокеру.

Результат, который я хочу получить: - Если вы выбираете брокера, вы переходите на страницу подробностей saferental.be/broker/broker-name/ (это уже нормально) - Если вы выбираете автомобиль, вы переходите на страницу сведений об автомобиле, которая должна выглядеть примерно так: saferental.be/broker/broker-name/car/car-name

Тестовый сайт: http://safelease.houston -1.hybridmedia.be /

Брокеры находятся внизу главной страницы.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Я сам сделал нечто похожее на это.

Это будет в вашем файле функций:

// Setup rewrite rules something like http://yourdomain.com/broker/my-broker/car/my-car
add_action( 'init', 'rewrites_init' );
function rewrites_init() {
    add_rewrite_rule(
        'broker/([-a-zA-Z0-9]+)/car/([-a-zA-Z0-9]+)$',
        'index.php?broker=$matches[1]&car=$matches[2]',
        'top' );
}

// Add variables
add_filter('query_vars', 'add_query_vars', 0);
function add_query_vars($vars) {
    $vars[] = 'broker';
    $vars[] = 'car';
    return $vars;
}

// catch the request for this page
add_action('parse_request', 'parse_requests', 0);
function parse_requests() {
    global $wp, $wp_query;
    if(isset($wp->query_vars['broker']) && isset($wp->query_vars['car'])) {
        // find the car post
        $posts = new WP_Query( array(
            'post_type' => 'car',
            'name' => $wp->query_vars['car'],
            'post_status' => 'publish'
        ));
        if(!empty($posts) ) {
            // set the global query or set your own variable
            $wp_query = $posts;
            // set the broker variable to use in your template
            $broker = get_page_by_path( $wp->query_vars['broker'], OBJECT, 'broker' );
            // include your custom post type template
            if (include(locate_template('single-car.php', true))) {
                exit();
            }
        } else {
            // handle error
            $wp_query->set_404();
            status_header(404);
            locate_template('404.php', true);
            exit;
        }
    }
}

Затем в шаблоне вашего автомобиля вы сможете получить доступ к переменной $broker post.

После того, как вы настроите правила перезаписи, вам может потребоваться перейти в Admin -> Настройки -> Постоянные ссылки и сохранить, чтобы установить перезаписи.

Надеюсь, это поможет вам.

0 голосов
/ 10 ноября 2018

Хотите ли вы, чтобы эта страница сведений об автомобиле также была доступна под saferental.be/car/car-name?

Если нет, то просто укажите страницу с информацией об автомобиле в качестве дочерней страницы для брокера, и URL для этой страницы будет saferental.be/broker/broker-name/car/car-name

Если вы хотите много разных URL для одной и той же страницы - попробуйте использовать этот плагин https://wordpress.org/plugins/mapping-multiple-urls-redirect-same-page/

...