Intereting Posts
Переменные и память WordPress Откуда взялись файлы JS в <html>? Пользовательское создание тем и постоянные ссылки Пользовательское действие комментариев Как отобразить ссылку, которая гласит «Редактировать изображение заголовка» в заголовке WordPress запускает 404 на странице 2 для пользовательских поисковых запросов Запускать posts_where и posts_join только по основному запросу Очистка WordPress для повышения производительности? Синхронизация только определенных пользователей и ролей между многосайтовой / многосетевой сетью Защита паролем wp-login.php Как выводить количество комментариев в столбце в день? Модульное тестирование в бэкэнде WordPress (is_admin () истинно) WordPress Использовать кеширование браузеров Показать, как исправить и устранить блокировку визуализации JavaScript и CSS в вышеприведенном содержании Показать, как исправить Как сделать мой третий многопользовательский блог с id 1000? Как ввести Permalinks в виджет pop-u-lar?

Прикрепите несколько настраиваемых сообщений к одному метаполе

В настоящее время я работаю над созданием шаблона интернет-магазина для WordPress.

Я создал два пользовательских типа сообщений, один из которых – «Продукты» для моих товаров. Пока это работает.

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

Я хотел бы знать, можно ли это сделать, или мне нужно искать другие способы сделать это?

Все, что вам нужно, это хранить идентификаторы сообщений продуктов вместе с заказом (проще всего через post_meta ). Затем вы можете запустить WP_query для извлечения всех продуктов.

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

Несколько пользователей

Хотя это не совсем то же самое, что и у вас, действуют те же принципы.

Я предполагаю, что вы уже удобны с крючками WordPress, обменными ящиками CPT и т. Д.

Тебе нужно:

  • Добавление продуктов в форму (поиск и получение идентификаторов продуктов с помощью ajax)
  • update_post в update_post чтобы сохранить форму в post_meta
  • Перечислите элементы из post_meta на страницу.

Представьте, что у вас есть обмен с формой:

 <form> <?php // lets get all your products saved as a serialized list // more on how thats done later $product_ids = get_post_meta( $post_id, 'product_ids', true ); // if no value, set default empty array if ( empty( $product_ids ) ) { $product_ids = array(); } else { // otherwise, deserialize the value $product_ids = explode( $product_ids, ',' ); } /* Two things to note about this code: 1. We are saving the IDs as a string, with ids separated by ',' which we explode into an array to use 2. We are using the post_meta 'single' argument instead of saving multiple metas and retrieving as array. You could do save multitple meta values, but it will use up more of your database and is generally harder to maintain */ ?> <table id="product_list"> <?php foreach( $product_ids as $p_id ) : ?> <tr> <td><input type="text" name="product_id[]" value="<?php echo $p_id; ?>"></td> </tr> <?php endforeach; ?> <!-- - Each row has an input with the same name ( id[] ) - Each input value must be a valid ID You have to use javascript to populate this table with new items which can be fetched using ajax through an input elsewhere in the page Note that to remove a field, just remove it from the DOM When saving, we'll overwrite the whole array, so any missing items won't be saved ... as if they were never there! --> </table> </form> 

Вы можете подключиться к save_post . $_POST[ 'product_id' ] теперь имеет массив со всеми идентификаторами сообщений. Handy!

 function yourdomain_save_post( $post_id ) { // check we are updating your product CPT if ( get_post_type( $post_id ) != 'your_products_cpt' ) { return; } // Parse the product id // make sure to check the values receieved, nonces, sanitization etc! $product_ids = join( $_POST[ 'product_id' ], ',' ); // this will serialize your product IDs: "2,34,92,3" // So it can be used with the display code in the previous example // save the list update_post_meta( $post_id, 'product_ids', $product_ids, true ); } 

Теперь, если вы хотите вывести информацию о каждом продукте (например, его имя), вы можете использовать WP_Query :

 // get comma separated string with product IDs $product_ids = get_post_meta( $post_id, 'product_ids', true ); // create WP_Query $args = array( 'post_type' => 'your_products_cpt', 'post__in' => $product_ids // you can use a comma separated list // of IDs here ... coincidence..? ); $query = new WP_Query( $args ); if ( $query->have_posts() ) { // pretty standard loop from now on // You're a pro at this I am sure! } 

Вот и все!

Я знаю, что он немного поспешил, но надеюсь, что этого достаточно, чтобы начать.

После того, как эти элементы на месте, вы можете начать добавлять улучшенные функциональные возможности и UX, например, используя jQuery-ui autocomplete с Ajax для поиска имен продуктов, использования имен (с идентификатором в скрытом поле) в таблице, отображения изображений продукта … небо это предел.

Если вам нужен быстрый способ сделать это, проверьте поля отношений ACF .

Также потратите некоторое время в кодексе для обмена веществ и сохраните почтовые перехватчики

Для Ajax я всегда ссылаюсь на превосходную статью о Smashingmag

И не забудьте проверить свои идентификаторы, дезинформировать ввод и защитить свой сайт с помощью NONCE!

Ура!