Создание связей между несколькими типами контента [закрыто]


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

Типы контента:

  • post
  • page
  • topic (из bbpress)
  • case (пользовательские типы отсюда и далее)
  • note
  • question
  • therapy_guideline

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

p2p_register_connection_type(
    array(
        'name' => 'post-to-post',
        'from' => 'post',
        'to' => 'post'
    )
);

p2p_register_connection_type(
    array(
        'name' => 'post-to-page',
        'from' => 'post',
        'to' => 'page'
    )
);

p2p_register_connection_type(
    array(
        'name' => 'post-to-topic',
        'from' => 'post',
        'to' => 'topic'
    )
);

p2p_register_connection_type(
    array(
        'name' => 'post-to-case',
        'from' => 'post',
        'to' => 'case'
    )
);

p2p_register_connection_type(
    array(
        'name' => 'post-to-note',
        'from' => 'post',
        'to' => 'note'
    )
);

p2p_register_connection_type(
    array(
        'name' => 'post-to-question',
        'from' => 'post',
        'to' => 'question'
    )
);

p2p_register_connection_type(
    array(
        'name' => 'post-to-therapy_guideline',
        'from' => 'post',
        'to' => 'therapy_guideline'
    )
);

Это просто для установления связей между публикациями и другими типами контента. Я повторил эти заклинания, чтобы установить другие различные связи - всего 28. Я съеживаюсь от этого повторения. Это может стать действительно неудобным, если будет добавлено больше типов контента, и если они должны иметь возможность подключаться ко всем (или большинству) других типов.

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

Мое намерение состоит в том, чтобы облегчить выбор связанного контента относительно текущего контента через серверную часть при создании/редактировании контента. Затем, чтобы отобразить Раздел "Связанный контент", следующий за отображением указанного текущего контента. Эти связанные фрагменты контента могут относиться ко всему спектру используемых типов контента, но будут выбраны вручную для обеспечения максимальной релевантности.

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

Author: Grant Palin, 2013-04-26

6 answers

Почему бы не сделать...

$my_post_types = array(
    'post', 
    'page', 
    'topic', 
    'case', 
    'note', 
    'question', 
    'therapy_guideline'
);

p2p_register_connection_type( array(
    'name' => 'my_post_relationships',
    'from' => $my_post_types,
    'to' => $my_post_types,
    'sortable' => 'any',
    'reciprocal' => false,
    'cardinality' => 'many-to-many',
    'title' => array(
        'from' => 'Children',
        'to' => 'Parent',
        ),
    'admin_column' => 'any',
    )
);

Или что-то подобное?

Изменить:

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

foreach($my_post_types as $post_type){
    // use line below if you don't ever need to relate posts to posts, pages to pages, etc.
    $temp_array = array_diff($my_post_types, array($post_type));

    p2p_register_connection_type( array(
        'name' => 'my_'.$post_type.'_connections',
        'from' => $temp_array, // use $my_post_types if you didn't define $temp_array
        'to' => $post_type,
        'sortable' => 'any',
        'reciprocal' => false,
        'cardinality' => 'many-to-many',
        'admin_column' => 'any',
        )
    )
}

Временный массив делает так, чтобы каждый тип записи был связан со всеми другими типами записей, но не сам по себе. Не уверен, хотите ли вы этого или нет, достаточно легко удалить.

 6
Author: GhostToast, 2013-06-02 13:48:20

Ghosttoast, похоже, ответил на ваш вопрос повторением.

Реализация этого для вашей конкретной ситуации должна отображать соответствующий контент: https://github.com/scribu/wp-posts-to-posts/wiki/Related-posts:

$связанный = p2p_type('posts_to_pages')->получить связанный( get_queried_object());

Единственная разница заключается в том, что мы заменили get_connected() на get_related().

Для ручного поиска определенного контента это доказало полезно для меня в прошлом: http://wordpress.org/plugins/better-internal-link-search/

 3
Author: 128KB, 2013-05-31 12:02:43

Актуальный для меня вопрос: для чего и как вы используете информацию о взаимоотношениях? Где он отображается или он вам нужен для какой-либо дальнейшей бизнес-логики?

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

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

Если накладные расходы плагина были в порядке для требуемой функциональности, я использовал Расширенные пользовательские поля (типы полей реляционных или почтовых объектов), которые делают все это без какого-либо php с помощью всего нескольких щелчков в бэкэнде (но использует post_meta для сохранения отношений).

 1
Author: s1lv3r, 2013-04-26 14:53:22

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

Затем вы можете использовать встроенный запрос таксономии WP для извлечения всего связанного контента для любого термина. Как правило, все, что вы собираетесь запрашивать, должно быть таксономией, а не полем, потому что запросы по полям намного тяжелее для БД.

 1
Author: Chris Cox, 2013-06-03 10:38:15

Если вы хотите создать связь между пользовательскими типами записей, вы можете использовать ТИПЫ плагинов . С помощью этого плагина вы можете создать пользовательский тип записи, а также установить отношения между ними, такие как родительское или дочернее отношение.

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

 0
Author: ksr89, 2013-05-30 04:40:17

Вам нужно это или что-то более сложное?

enter image description here

Это всего лишь пример прототипа. therapy_guideline может иметь surgical_therapy_guideline, conservative_therapy_guideline, palliative_therapy_guideline, и т.д.

Как бы сложно вы ни хотели, вы действительно можете это сделать. Вам действительно нужно внедрить семантическую сеть на этом веб-сайте. Самый простой способ создать семантику - использовать данные RDFa. Вы можете использовать Расширенный плагин публикации . Существует множество бесплатных ресурсов для создания семантического веба. Вы можете использовать Apache Stanbol плюс Открыть Уточнить (поиск в проекте Google). То, что вы будете использовать, зависит от объема возможных запросов и того, насколько масштабируема база данных, и, очевидно, от ваших знаний. Плагин расширенной публикации будет постепенно добавлять небольшие данные в базу данных MySQL WordPress (это даже не MySQLi). Лучше конвертировать в PostgreSQL на сервере nginx, если вы хотите использовать плагин WordPress plus, а нагрузка на сервер очень высока.

Очевидно, что вы можете использовать RDFa, JSON или API с Apache Stanbol и использовать его с Пользовательский крюк PHP или WordPress. Вы можете использовать фреймворк Еще одного связанного плагина для публикации, если хотите создать плагин.

 0
Author: Dr. Abhishek Ghosh, 2013-06-04 12:20:07