WordPress как на ладони

Как правильно организовать сложную структуру сайта на WP?

Необходимо правильно реализовать структуру сайта. Немного описания проблемы. Для примера, чтобы легче понять, возьму сайт айэмдиби. Суть в том, что нужно сделать приблизительно такие страницы, как допустим в айэмдиби страница какого-то определённого фильма (этих страниц будет много и они будут делиться по разным категориям) и чтобы к этой страницы автоматом крепились новые записи и другой контент, который будет публиковаться на сайте.

Пример
Берём одну страницу. Она называется "Кино №1", на этой странице идёт краткое описание + другие медиафайлы (здесь всё просто). Но эта страница должна принадлежать к одной или нескольким категориям/тегам. Допустим страница "Кино №1" и эт стр. относится к выпуску "2001 года" и жанру "Экшн".

Также в дальнейшем будет появляться новый контент, а именно новости и другие статьи из разных категорий. И необходимо сделать, так, чтобы при добавление новой записи (Актёр из "Кино №1" женился...) или статьи ( 10 фактов о "Кино №1") - они автоматом подтягивались к соответствующей странице.

Конечно это можно делать ручками если пару страниц, но опять же планируется их большое количество.

Собственно, думаю, как это грамотно реализовать.

Представляю это следующим образом. Для страничек фильмов делаю произвольные записи. Жанр и год добавляют тегами + вбиваю тег с названием этого фильма. А при добавлении новости или другой записи указываю тег этого фильма и он выводиться на соответствующей странице этого тега. Подскажите правильно ли я рассуждаю.

Ещё возникаем вопрос, делать страницы фильмов записями или именно страницами?

Заранее спасибо

0
bob-chinskiy
3 года назад
  • 1

    Для сложных связей между записями можно использовать совершенно волшебный плагин CPT-Onomies. Плагин создает непубличную таксономию на основе каждого выбранного произвольного типа записей и позволяет с ее помощью связывать записи между собой.

    В описании плагина как раз приводится пример с киносайтом :))

    https://wordpress.org/plugins/cpt-onomies/

    bob-chinskiy 3 года назад

    Спасибо за ответ. Да, я вот как рас решаю этот вопрос благодаря плагину. В целом уже всё понял, но есть пару нюансов. Допустим когда я создаю метку и делаю публикацию с помощью созданных этим плагином разделов постов/таксономий, то при выдаче всех публикации по этому тегу/метке, оно не выводит публикации из специально созданных публикаций, а только из стандартных вордпрессовских записей и страниц. Допустим я создал произвольные материалы "Фильмы" и присваиваю этому фильму тег "КИНО" и делаю запись через стандартные вордпресс и запись через произвольную запись и на странице по данному тегу не отображается материалы созданные с помощью произвольных записей, а только созданные через стандартные записи WP.

    И так не разобрался с вопросом - каким образом передавать записи относящиеся к определённой странице. Чтобы на странице "Сериал №1" подтягивались новости и все записи относящиеся к этой странице в определённый блок на странице "Сериал №1". Заранее спасибо

    Andrew 3 года назад

    а только созданные через стандартные записи WP.

    посмотрите, каким запросом WordPress получает записи по тегу. По умолчанию в запрос для шаблона tag.php включаются только записи типа post. Вероятнее всего, придется модифицировать запрос через фильтр pre_get_posts

    Что-то вроде такого:

    add_action('pre_get_posts', function($query) {
    
    	if (!is_admin() && is_tag() && $query->is_main_query()) {
    
    		$types = get_taxonomy('post_tag')->object_type; // собираются в массив все типы записей, к которым привязываются теги
    
    		$query->set('post_type', $types); // модифицируется запрос
      }
    });

    И так не разобрался с вопросом - каким образом передавать записи относящиеся к определённой странице.

    если мы говорим про CPT-onomies, то там term_id элемента скрытой таксономии, одноимённой типу записи, равен ID поста, на основе которого создан этот элемент.

    т.е. получив с помощью стандартной функции get_the_terms( $post->ID, 'post_type' ) массив элементов таксономии, по сути вы получите массив записей из нужного вам post_type, привязанных к посту.

    далее через foreach() обходите массив, но внутри цикла используйте функции записей, а не таксономий.

    $terms = get_the_terms( $post->ID, 'post_type' ) ;
    	foreach( $terms as $term ){
    		$term_post = get_post($term->term_id); // здесь происходит волшебство
    
    // после чего делаете с объектом $term_post всё, что захотите. 
    	}

    вместо 'post_type' вставьте слаг типа записи, либо массивом - несколько.

    bob-chinskiy 3 года назад

    Большое спасибо. Буду разбираться. Всего хорошего)

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация