Профили пользователей и ассоциации объектов

Я перехожу с Drupal, и я очень привык к тому, как Drupal обрабатывает пользователей и объекты (называемые узлами там). Мне нужно узнать, как WordPress обрабатывает эти же ситуации.

Поскольку нас будут путать с теми же словами, которые означают разные вещи, я определю некоторые из них здесь:

  • Узел. В Drupal все является узлом. Сообщение – это узел. Страница – это узел. Продукт является узлом.
  • Автор. В Drupal каждый узел имеет автора. Подумайте об авторе WordPress.
  • Продукт. В Drupal продукт является узлом. На моем сайте я продаю книги. Итак, книга – это продукт, который является узлом.
  • Автор книги – В обычном смысле автором книги является человек, который ее написал. Теперь я буду ссылаться на это как на автора книги, чтобы избежать путаницы с автором узла. Каждый автор книги является пользователем на сайте.

На моем сайте, поскольку каждому узлу нужен автор, когда я создаю продукты, я связываю автора узла с автором книги. Представьте, что вы создали сообщение в WordPress и сказали, что автор сообщения – это кто-то, кроме вас. То же самое.

На странице профиля пользователя (профиль автора книги) я могу перечислить книги, которые они написали (со ссылками на фактический узел продукта) на странице своего профиля. У меня просто есть раздел, где я обрабатываю каждый продукт, где он является автором узла.

Теперь мне нужно узнать, как WordPress справляется с этой ситуацией, будь то через плагин или код в functions.php . До сих пор я читал профили пользователей, и они не такие же, как у Drupal.

  1. Как связать пользователя как автора книги? Я предполагаю, что это будет какая-то пользовательская роль в WordPress; однако я читал об этом, и, похоже, роли в WordPress связаны только с разрешениями на публикацию и т. п.

  2. Как связать пользователя (автора книги) с продуктом? Я использую плагин WooCommerce. Я знаю, что могу создать настраиваемое поле на продукте, называть его «Автором», а затем помещать там имя, но это просто будет выглядеть как простой текст. Мне нужно связать это поле как ссылку с профилем пользователя (автора книги) и уметь связать этот продукт с профилем пользователя.

  3. Является ли профиль пользователя даже подходящим способом справиться с этим в WordPress? Или я должен искать какой-то другой шаблон? Возможно, пользовательский тип сообщения, который имеет блок кода в шаблоне, который будет отображать список продуктов на основе заголовка сообщения (используется здесь как имя автора) или что-то в этом роде? Если это хороший способ сделать это, как мне связать ссылки с этой страницей? т.е. при нажатии имени пользователя в комментарии он должен перейти к этой связанной персонализированной записи вместо профиля пользователя.

Извините, если все это сбивает с толку. Это неправильное поведение в Drupal, и поскольку это буквально вторая неделя, использующая WordPress, все это немного запутывает меня.

ПРИМЕЧАНИЕ. Администратор должен создать тег Drupal. Выполнение быстрого поиска Я нахожу много сообщений в отношении Drupal здесь, и это может помочь пользователям, знакомым с обеими платформами, найти вопросы, на которые они могут умело ответить. 😉

Однако я не знаю, что Drupal мне кажется, что «узел» в drupal является «post type» в WordPress.

По умолчанию WordPress имеет несколько типов сообщений: сообщения, страницы, atthachments, пункты меню, ревизии (эти типы сообщений часто называются «встроенными»).

Вы можете зарегистрировать любое количество настраиваемых типов сообщений, например CPT.

Типы сообщений в базе данных отличаются друг от друга только для столбца post_type в таблице сообщений.

Однако «поведение» у них может быть очень различным и зависит от аргументов регистрации типа post.

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

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

В WordPress каждый пост, независимо от типа, имеет автора. (так же, как узлы имеют авторов в Drupal, для чего я могу понять).

Сообщение для отношения автора – один-ко-многим (сообщение может содержать только одного автора, а автор может иметь много сообщений). Это отношение в базе данных обрабатывается через поле post_author в таблице сообщений.

Это поле ссылается на идентификатор в таблице пользователей: так что уникальный автор для сообщения является пользователем: имеет имя пользователя, пароль, профиль и т. Д.

В вашем случае «Книга» должна быть типом сообщения, и если вам хорошо, что автор книги является реальным пользователем, вы можете использовать книги ссылок и авторов, используя поле post author .

Это будет легко сделать, потому что пользовательский интерфейс создания / редактирования сообщений по умолчанию имеет поле для настройки пользователей, а также некоторые теги шаблона по умолчанию, которые вы можете использовать (например, the_author и связанные с ним ).

Кроме того, вы можете использовать иерархию шаблонов для легкой настройки архива автора (в WordPress «архив» – это веб-страница, на которой отображается набор сообщений, которые имеют общую функцию: архив таксономии представляет собой страницу с сообщениями с одинаковой таксономией, авторский архив – это страница с сообщениями определенного автора).

Если ваши авторы не являются реальными людьми, но это всего лишь способ подключения книг, вы можете использовать другой подход, потому что, если авторы книг являются авторами сообщений (поэтому пользователи), у них должно быть электронное письмо, учетная запись и т. Д. …

Альтернативы, по сути, используют другой тип публикации для авторов или используют таксономию.

Таксономии – это еще один тип «сущности» в WordPress. В каждой таксономии могут быть неограниченные сроки (так же, как у любого типа сообщения может быть неограниченное количество сообщений). Категории и теги являются 2 таксономиями по умолчанию, но вы можете зарегистрировать неограниченные пользовательские таксономии .

Что касается того, как сообщения могут быть подключены к другим сообщениям, в WordPress, вне коробки, вы должны:

  1. Отношение «один ко многим» сообщений с одинаковым типом сообщения: это отношения родитель-потомок, которые вы можете настроить, просто зарегистрировав тип сообщения как иерархический. Например, страницы WordPress.
  2. Второй тип является своего рода «косвенным» отношением «многие ко многим», использующим таксономию. Вы можете назначить один и тот же термин таксономии на разные должности (даже из разных типов сообщений), а также на получение или показ сообщений, которые используют один и тот же термин, «связав» их. В качестве примера вы можете создать таксономию для каждого автора книги и присвоить таксономию книгам, чем использовать таксономические архивы для показа сообщений.

Так что если ваши авторы книг не являются реальными пользователями, то таксономия может быть правильной.

Теперь проблема WooCommerce (или лучше проблема, которую вы можете иметь с WooCommerce). Этот плагин регистрирует тип сообщения для обработки продуктов, имя cpt – это «продукт».

Если вы зарегистрируете пользовательские типы сообщений для книг, чем вы не можете продать их с помощью WooCommerce, потому что только «Продукты» (сообщение с типом «Тип публикации») могут быть проданы из коробки с использованием этого плагина.

Я не знаю, есть ли какой-либо плагин, который позволяет продавать другие пользовательские типы сообщений. Однако простым способом решения проблемы может быть использование типа «Продукт» для книг и

  • зарегистрируйте пользовательскую таксономию под названием «Тип продукта», создайте в ней термин «Книга»,
  • вероятно, лучшей альтернативой является создание собственного типа продукта WooCommerce для книг. См. Этот ответ WPSE от @helgatheviking . Типы продуктов WooCommerce – это способ использования плагина для обработки продукта с различными функциями (простыми, переменными, загружаемыми и т. Д.).

Что касается подключения книг к книгам авторов, если вы используете пост-автора, то просто назначьте подходящего автора, а затем, когда вам нужно показать ссылку на архив автора, используйте the_author_link шаблона the_author_link . Если вы используете таксономию, используйте get_term_link шаблона get_term_link чтобы показать ссылку на соответствующий архив.

Есть альтернатива, о которой я еще не упоминал. Если авторы книг не являются реальными пользователями (поэтому вы не используете поле pos author), и вы хотите создать архив авторов (страницу, в которой показаны все авторы), а также «единое представление» каждого автора (например, страница с биографией автора) , информация, фотографии …), вероятно, вам нужно создать другой тип публикации для авторов. Это может быть проблемой: как было сказано ранее, в WordPress отсутствует система для прямого подключения сообщения с разными типами сообщений (в вашем случае «продукт» и «автор»).

Известный плагин Posts2Posts может помочь решить эту проблему, или вы можете обрабатывать это соединение самостоятельно, используя настраиваемое мета-поле (возможно, « book_author_id' ) для типа публикации (или книги) продукта. В этом случае ссылка на связанную страницу автора может быть показана в цикле (архив продукта или отдельная страница продукта) с использованием get_permalink в сочетании с get_post_meta , что-то вроде:

 $author = get_post( get_post_meta( get_the_ID(), 'book_author_id', TRUE) ); $title = apply_filters('the_title', $author->post_title); $link = get_permalink($author); echo '<a href="' . $link . '" title="' . $title. '">' . $title. '</a>'; 

После этого в шаблоне одного автора (в соответствии с иерархией шаблонов это будет 'single-author.php' вы можете показать информацию об авторе (post content) вместе со всей книгой для этого автора, используя пользовательский WP_Query используя «meta_query», аргумент, что-то вроде:

 // single-author.php the_post(); <h1>Author Name: <?php the_title() ?></h1> <h2>Author Info</h2> <div><?php the_content() ?></div> <h2>Books by <?php the_title() ?></h2> <?php $args = array( 'post_type' => 'products', 'meta_query' => array( 'meta_key' => 'book_author_id', 'meta_value' => get_the_ID() ) ); $books = new WP_Query( $args ); if ( $books->have_posts() ) : while( $books->have_posts() ) : $books->the_post(); ?> <div class="book"> <h3><?php the_title() ?></h3> <p><?php the_excerpt() ?></p> <a href="<?php the_permalink() ?>">Details</a> </div> <?php endwhile; wp_reset_postdata(); else: ?> <div>Sorry, <?php the_title() ?> has no books.</div> <?php endwif; ?> 

Однако, если авторы книг являются настоящими пользователями (у них должна быть учетная запись на сайте), я настоятельно рекомендую использовать автора сообщения для подключения книг к авторам книг, и если вам нужна некоторая информация для архива авторов, вы можете использовать поле описания автора в пользователе страницу профиля и использовать шаблон пользовательской страницы в сочетании с WP_User_Query если вы хотите показать архив всех авторов книг.

Это очень общий вопрос, и так будет ответ – «В любом случае вам нравится».

AFAIK WordPress – это менее жесткая платформа, а затем drupal, и никто не поддерживает способ связывания объектов в системе, и WordPress на самом деле постоянно развивается и предлагает новые способы сделать это.

Если мы смотрим только на то, что считается лучшей практикой на данный момент времени, самая легкая часть в вашем вопросе – это обработка продуктов, это будет обычное время, которое связано с сообщением, аналогичным тому, как это было бы связанных с узлом в drupal.

Авторы книг сложнее. В моем мире пользователи – это только сущности, которые могут войти в систему, и я предполагаю, что автору книги не будет предложено войти в ваш магазин, поэтому они не являются пользователями. Что они должны быть? Это будет зависеть от других факторов, если они будут доступны для поиска, если вы сможете их сгруппировать, или они будут просто использоваться для группировки продуктов. В зависимости от конкретной потребности, которую вы, возможно, захотите сделать в качестве CPT, но вы можете сделать это как таксономии.