Возможно Ли Иметь Общие Пользовательские Типы Записей Wordpress?
Я разрабатываю веб-сайт для звукозаписывающего лейбла, и в основном он использует довольно много пользовательских типов сообщений для различных частей информации. Моя проблема в том, что я чувствую, что одни и те же фрагменты информации повторяются, а не передаются.
У меня есть пользовательский тип публикации художников, однако на главной странице также есть карусель с художниками, но для отображения другой информации. Итак, у меня есть пользовательский тип записи "карусель домашней страницы", в который я должен ввести имена и информация об исполнителях, а также изображение, а также пользовательский тип записи "художники" с некоторыми из тех же сведений, введенных повторно.
Клиенту, вероятно, не понравится необходимость постоянно вводить одну и ту же информацию в несколько пользовательских типов записей, возможно ли сделать тип записи наследуемым от другого?
Таким образом, я могу указать, что мой тип записи "карусель на домашней странице" наследуется от типа записи "Художники", чтобы информация о художнике была общедоступной и не требовала повторного ввода опять?
В настоящее время я создал пользовательскую таксономию под названием "художники" и ввел все возможные имена художников, а затем, например, в типе записи "карусель домашней страницы" я выбираю художника в правой части как категорию. В некотором смысле это работает хорошо, однако вам все равно нужно ввести заголовок, иначе вы получите какую-то бессмыслицу "Автосохранения", сохраняемую в качестве заголовка, что затруднит редактирование и сортировку по ходу. Возможно, есть способ установить название в качестве категории "художник" что было выбрано?
Дайте мне знать, если вы не совсем понимаете, и я постараюсь рассказать немного подробнее. Я в основном хочу поделиться централизованным списком исполнителей и информацией, которую я могу унаследовать от других типов сообщений.
* Обновление *
Немного подробнее о моем первоначальном вопросе.
Вот мои определенные типы сообщений и информация, которую они содержат. Что я хочу сделать, так это установить общие отношения между моим типом публикации "художники" и другими типы сообщений, которые каким-то образом связаны с художником.
Тип публикации: исполнители
Поля: Заголовок, Редактор Wysiwyg, Рекомендуемое изображение, URL-адрес Facebook, Имя пользователя Twitter, URL-адрес Веб-Сайта.
Тип записи: домашняя страница_карусель
Поля: Название, Ссылка для получения дополнительной информации, Ссылка на покупку компакт-диска, Ссылка на покупку MP3
Элемент карусели соответствует художнику, определенному в типе публикации "Художники" выше. Таким образом, возможность связать этот тип публикации с типом публикации художников - это то, что я хотеть.
Тип публикации: видео
Поля : Название, Код встраивания видео (455 пикселей), Код встраивания видео (466 пикселей), Код встраивания видео (608 пикселей), Описание видео.
Элемент видео соответствует исполнителю, определенному в типе публикации "Исполнители". Я хочу иметь возможность назначить видео исполнителю.
Как вы можете видеть, я хочу в основном установить отношения "многие к одному" или это отношения "один ко многим"? Один из них (я думаю). Я начал возиться с этим плагином: http://wordpress.org/extend/plugins/posts-to-posts / - но я еще не совсем понимаю, как его правильно использовать, я думаю, что это то, чего я хочу. Так что, если кто-то использовал это раньше, ваша помощь будет признательна.
Хотя я знаю о пользовательских таксономиях и терминах, я думаю, что то, чего я хочу, выходит далеко за рамки требований, которые я ищу, поскольку я имею дело с несколькими частями информации и просто хочу каким-то образом связать 2 типа сообщений вместе.
3 answers
Я, так сказать, частично решил свой собственный вопрос. Я уже целую вечность пытаюсь наладить отношения между типами сообщений и типами сообщений, связанными с плагинами, как указано в моем комментарии к ответу Кристофера. Он далек от совершенства, но я придумал, как получить этот плагин: http://wordpress.org/extend/plugins/relation-post-types / - работает (хотя и не так красиво).
Следующий код выведет элемент карусели домашней страницы, а затем имя связанного исполнителя. Это может быть изменено, чтобы также получить мету связанного сообщения. Я хотел использовать плагин Scribu posts 2 posts, но не смог понять, как его использовать.
$carousels = get_posts(array('post_type' => 'homepage_carousel'));
$counter = count($carousels);
$increment = 0;
foreach($carousels as $carousel):
$image = wp_get_attachment_image_src( get_post_thumbnail_id( $carousel->ID ), 'large' );
$related_ids = rpt_get_object_relation($carousel->ID, array('artists'));
foreach ($related_ids as $related_id) {
$related_post[] = get_post($related_id);
}
<li style="background: transparent url(<?php echo $image[0]; ?>) no-repeat;">
<div class="carousel_content">
<p class="large_heading"><?php echo $related_post[$increment]->post_title; ?></p>
<p class="carousel_meta">
<?php if (get_post_meta($carousel->ID, 'learn_more_link', true)): ?>
<?php $link = true; ?>
<a href="<?php echo get_post_meta($carousel->ID, 'learn_more_link', true); ?>">Learn More</a>
<?php endif; ?>
<?php if (get_post_meta($carousel->ID, 'buy_cd_link', true)): ?>
<?php $link2 = true; ?>
<?php if ($link): ?> | <?php endif; ?>
<a href="<?php echo get_post_meta($carousel->ID, 'buy_cd_link', true); ?>">Buy CD</a>
<?php endif; ?>
<?php if (get_post_meta($carousel->ID, 'buy_mp3_link', true)): ?>
<?php if ($link2 || $link): ?> | <?php endif; ?><a href="<?php echo get_post_meta($carousel->ID, 'buy_mp3_link', true); ?>">Buy MP3</a>
<?php endif; ?>
</p>
</div>
Как вы можете видеть, это очень банальное и ни в коем случае не окончательное решение. Это сработало для меня, но я все еще недоволен тем, как работает приведенный выше код. Чтобы получить связанную мету сообщения, потребуется больше кода.
Поскольку ответа нет, возможно, это должно стать вики-страницей больше, чем вопросом, возможно? Поскольку перечисленные здесь решения не всегда будут будьте в курсе событий, так как Wordpress постоянно развивается и выпускаются новые плагины.
Привет@Дуэйн:
На самом деле вы не можете "поделиться" типом записи; у каждой записи есть один тип.
Но меня больше беспокоит, может быть, выбранная вами архитектура 'homepage_carousel'
неверна и, следовательно, приводит вас ко всевозможным головоломкам, таким как желание поделиться типами сообщений. Можете ли вы более подробно описать, что содержит 'homepage_carousel'
?
На первый взгляд это звучит как классический случай необходимости таксономии для вашего post_type='artist'
, называемого "Рекомендуемые местоположения" (возможно) и вы используете тег "Карусель домашней страницы?"
Если вы можете обновить свой вопрос, чтобы сообщить мне, почему это не сработает, тогда я могу помочь вам больше. Из этого если получится, то здорово!
Пользовательские типы сообщений и таксономии тоже сбивают меня с толку, но я думаю, что Майк получил ваш ответ с его предложением использовать таксономии здесь.
Карусель - это не тип контента, который вы хотите добавить в базу данных, это контент в базе данных, который вы хотите представить. В этом случае вашим ответом будет запрос, который ищет альбомы исполнителя (пользовательский тип и таксономия) (пользовательский тип) с пользовательскими полями (подробнее, купить компакт-диск, купить mp3) с "рекомендуемым местоположением" таксономия.
Хотелось бы услышать мнение других по этому поводу, поскольку пользовательские типы сообщений и таксономии остаются одной из вещей, которые я нахожу наиболее запутанными. В частности, я не уверен, как решить, что художник является как пользовательским типом записи, так и таксономией, что, на мой взгляд, необходимо для того, чтобы разрешить дополнительную мету, которую вы хотите, а также взаимосвязи с другими данными.
Что касается видео, возможно, вы захотите посмотреть постформаты, которые появятся в 3.1, чтобы вам не понадобилось отдельное встраивание коды для каждого размера, просто другой атрибут отображения.
Я надеюсь, что это поможет вам или, по крайней мере, продвинет разговор.
Ура!