Для реализации описанного вами функционала с типами записей "Компания" и "Работа" с использованием Advanced Custom Fields (ACF) вам потребуется настроить несколько различных компонентов. Давайте подробно рассмотрим, как это можно сделать.
### 1. Регистрация пользовательских типов записей
Вы уже начали с регистрации типов записей "Компания" и "Работа". Это хорошо. Убедитесь, что у вас есть правильные возможности для работы с ними. Например:
```php
function register_company_post_type() {
register_post_type('company', array(
'labels' => array(
'name' => 'Компании',
'singular_name' => 'Компания',
),
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'thumbnail'),
'rewrite' => array('slug' => 'companies'),
));
}
add_action('init', 'register_company_post_type');
function register_job_post_type() {
register_post_type('job', array(
'labels' => array(
'name' => 'Работа',
'singular_name' => 'Работа',
),
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'thumbnail'),
'rewrite' => array('slug' => 'jobs'),
));
}
add_action('init', 'register_job_post_type');
```
### 2. Связь между типами записей
Для реализации связи между типами записей "Работа" и "Компания" вам понадобится использовать ACF. Вот пример того, как это можно сделать:
1. **Создание поля для связи**: В админке ACF создайте поле типа "Объект записи" или "Родственная связь" для типа записи "Работа", чтобы выбрать связанную компанию. Например, назовем его `related_company`.
2. **Добавление ACF метаполей**:
```php
if( function_exists('acf_add_local_field_group') ) {
acf_add_local_field_group(array(
'key' => 'group_job',
'title' => 'Данные о вакансии',
'fields' => array (
array (
'key' => 'field_related_company',
'label' => 'Компания',
'name' => 'related_company',
'type' => 'post_object',
'post_type' => array(
0 => 'company',
),
'required' => 1,
'return_format' => 'id',
),
),
'location' => array (
array (
array (
'param' => 'post_type',
'operator' => '==',
'value' => 'job',
),
),
),
));
}
```
### 3. Личный кабинет пользователя
Для того чтобы пользователи могли добавлять свою компанию и размещать вакансии, вам нужно будет организовать отдельные формы на странице профиля. Вы можете использовать функции WordPress для управления созданием записей. Вот примеры:
- **Создание формы для добавления компании**:
```php
if ( isset($_POST['submit_company']) ) {
$company_id = wp_insert_post(array(
'post_type' => 'company',
'post_title' => sanitize_text_field($_POST['company_name']),
'post_content' => sanitize_textarea_field($_POST['company_description']),
'post_status' => 'publish',
));
// Дополнительные действия, если необходимо
}
```
- **Создание формы для добавления вакансий**:
```php
if ( isset($_POST['submit_job']) ) {
$job_id = wp_insert_post(array(
'post_type' => 'job',
'post_title' => sanitize_text_field($_POST['job_title']),
'post_content' => sanitize_textarea_field($_POST['job_description']),
'post_status' => 'publish',
));
// Установка связи с компанией
if ( ! empty($_POST['related_company']) ) {
update_field('related_company', intval($_POST['related_company']), $job_id);
}
}
```
### 4. Отображение данных
Чтобы отображать информацию о компании и список связанных вакансий, вы можете использовать следующие функции в шаблонах.
- Для отображения информации о компании:
```php
$company_id = get_the_ID(); // Предполагается, что это страница компании
$jobs = new WP_Query(array(
'post_type' => 'job',
'meta_query' => array(
array(
'key' => 'related_company',
'value' => $company_id,
'compare' => '=',