Intereting Posts
Как получить тему для архивирования стандартных сообщений то же самое, что и с asides, чатами и т. Д. Уведомление о том, что администратор подключен к сети Список соавторов всех сообщений Проверка нового сообщения с использованием AJAX и PHP. Перегрузка сервера? $ post переменная пустая после перевода страницы Как do_action funtion работает с параметром пути? возможно ли обрезать изображения обложек в buddypress? Захват действия wp_trash_post с пользовательским типом сообщения Как может возникнуть или измениться .htaccess с аутентификацией? Добавление colorbutton в диалоге tinymce с текущим api GoDaddy Количество файлов изображений в каталоге превышено Woocommerce меняет цену продукта после того, как Woocommerce удалила его из базы данных Проверьте, зарегистрировано ли конкретное имя пользователя Как получить значения параметров, установленные со всех сайтов в многоуровневой настройке? перенаправить второй домен на статическую страницу

Автоматическое создание дочернего пользовательского сообщения при создании пользовательского сообщения

У меня есть пользовательский тип сообщения, называемый «художник». Всякий раз, когда я создаю пост «художника», я получаю следующую ссылку: www.myexample.com/artist/artist-name

Это мой код single-artist.php:

<?php get_header(); ?> <?php $query = new WP_Query( 'post_type=artist' ); ?> <?php while ( $query->have_posts() ) : $query->the_post(); ?> <div class="artist-info"> <p>Artist name</p> <a href="/hire-artist/artist-name">Hire artist</a> <div> <?php endwhile ?> <?php wp_reset_postdata(); ?> <?php get_footer(); ?> 

Это код для регистрации настраиваемого сообщения:

 function codex_custom_init() { register_post_type( 'artist', array( 'public' => true, 'label' => 'Artists', 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail' ), ) ); } add_action( 'init', 'codex_custom_init' ); 

Я хочу сделать это, когда создаётся пост «artist», а также «подпоста» его создается с использованием этой постоянной ссылки: www.myexample.com/hire-artist/artist-name

Таким образом, оба сообщения остаются связанными, но являются разными типами сообщений, так как я буду использовать другой шаблон для подзаголовка «Аренда-художник». Также ссылка в теге a получает ссылку на дочерний пользовательский пост.

Можно ли это сделать? Какой был бы лучший способ сделать эту автоматизацию?

Solutions Collecting From Web of "Автоматическое создание дочернего пользовательского сообщения при создании пользовательского сообщения"

Вместо того, чтобы создавать другое сообщение, которое, как представляется, предназначено исключительно для создания другого шаблона, я бы добавил конечную точку перезаписи для поддержки дополнительного сегмента в конце URL-адресов исполнителя. В этом случае ваши URL-адреса будут следующими:

http://www.example.com/artist/artist-name/hire/

Преимущество этого заключается в том, что все данные, относящиеся к художнику, могут оставаться в пределах одной должности художника. Когда эти сообщения отображаются на переднем конце, запрашиваемый объект содержит данные исполнителя, не требуется соединение нескольких сообщений.

Для этого сначала добавим конечную точку:

 function wpd_hire_endpoint(){ add_rewrite_endpoint( 'hire', EP_PERMALINK ); } add_action( 'init', 'wpd_hire_endpoint' ); 

Обратите внимание, что если ваш тип сообщения является иерархическим, вам нужно использовать EP_PAGES конечной точки EP_PAGES вместо EP_PERMALINK .

Затем добавьте фильтр в single_template для загрузки шаблона найма при посещении этих URL-адресов:

 function wpd_hire_template( $template = '' ) { global $wp_query; if( ! array_key_exists( 'hire', $wp_query->query_vars ) ) return $template; $template = locate_template( 'hire.php' ); return $template; } add_filter( 'single_template', 'wpd_hire_template' ); 

Не забудьте сбросить правила перезаписи после добавления конечной точки.

EDIT – добавление дополнительного правила перезаписи для получения альтернативной структуры URL:

 add_rewrite_rule( 'hire-artist/([^/]+)/?$', 'index.php?artist=$matches[1]&hire=true', 'top' );