Intereting Posts

Учитывая два пользовательских типа сообщений: автоматически добавлять метаполя из одного настраиваемого типа сообщения в другой

Пользовательский тип сообщения «Компания» имеет:

Пользовательский тип сообщения «Ресторан» имеет:

  • Название поля ресторана

  • Поле описания ресторана

Как я могу сделать так, чтобы всякий раз, когда я добавляю новую компанию (заполняются поля ресторана), она автоматически добавит новый ресторан, чьи поля / данные совпадают с недавно добавленной компанией?

Моя идея:

  • Когда я создаю новую компанию, я добавлю данные ресторана в таблицу «рестораны» в базе данных

  • Кроме того, всякий раз, когда я создаю новую компанию, я получаю последнюю запись из таблицы «рестораны» и каким-то образом добавляю их для создания нового сообщения в ресторане

Возможно ли это? Если нет, или если у вас есть другая идея решить проблему, пожалуйста, поделитесь ею.

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

Предоставление примера было бы очень полезно. Благодаря!

Solutions Collecting From Web of "Учитывая два пользовательских типа сообщений: автоматически добавлять метаполя из одного настраиваемого типа сообщения в другой"

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

Когда рестораны уже являются CPT, они сохраняются в таблице сообщений и с информацией, которую вы разделяете, это кажется достаточно.

Автосоздайте пост ресторана, когда создается сообщение Компании, и поле названия ресторана заполнено, очень легко без какого-либо плагина.

Если вы введете название / описание ресторана с помощью метабокса, возможно, вы save_post чтобы сохранить эти поля в ресторане, вы можете использовать одну и ту же функцию, чтобы сохранить сообщение в ресторане, используя wp_insert_post : используя название ресторана в качестве названия, описание ресторана в качестве контента и настройки post_author к тому же post_author сообщения компании. В столбе ресторана вы можете сохранить настраиваемое поле, что-то вроде '_company_ID' и установить его на идентификатор компании, это будет очень полезно, когда вам нужно будет восстановить ресторан, связанный с конкретной компанией, кроме того, это поможет вам избегать дубликатов.

Я предполагаю, что у вас есть метабокс, чтобы вставить мета-поля ресторана. Если нет, я предлагаю добавить его, см. Документы add_meta_box .

Предположим, у вас есть функция 'save_post' чтобы сохранить мета-поля ресторана из метабокса:

 add_action('save_post', 'save_restaurant_fields'); function save_restaurant_fields( $postid ) { /* If this is an autosave, do not do anything */ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; /* Check if our nonce is set (of course you have to set a nonce in the metabox) see wp_nonce_field in codex //codex.wordpress.org/Function_Reference/wp_nonce_field */ $nonce = filter_input(INPUT_POST, 'restaurant_data_nonce', FILTER_SANITIZE_STRING); if ( empty($nonce) || ! wp_verify_nonce( $nonce, 'restaurant_data' ) ) return; /* Check the user's permissions */ if ( ! current_user_can( 'edit_post', $postid ) ) return; /* Continue only for Company CPT */ $post = get_post( $postid ); if ( $post->post_type !== 'company' ) return; /* Get & sanitize user input */ $rname = filter_input(INPUT_POST, 'restaurant_name', FILTER_SANITIZE_STRING); $rdesc = filter_input(INPUT_POST, 'restaurant_desc', FILTER_SANITIZE_STRING); /* Update the meta fields in the database */ update_post_meta( $postid, '_restaurant_name', $rname ); update_post_meta( $postid, '_restaurant_desc', $rdesc ); /* Now check if exists a restaurant for this company */ $meta = array( array( 'key' => '_company_ID', 'value' => $post->ID ) ); $exists = new WP_Query( 'post_type' => 'restaurant', 'meta_query' => $meta ); if ( ! $exists->found_posts ) { /* restaurant for company does not exists */ $restaurant = array( 'post_type' => 'restaurant', 'post_title' => $rname, 'post_content' => $rdesc, 'post_author' => $post->post_author, 'post_status' => 'publish' ); $rid = wp_insert_post( $restaurant ); /* save restaurant post */ if ( is_numeric($rid) && (int) $rid > 0 ) { /* save company ID in a restaurant meta field */ update_post_meta( $rid, '_company_ID', $post->ID ); /* I inserted restaurant post name/description as post title/description but if you need restaurant them also in custom fields */ update_post_meta( $rid, '_restaurant_name', $rname ); update_post_meta( $rid, '_restaurant_desc', $rdesc ); } } } 

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