Поддержка → Проблемы и решения → Хранение данных в wp_posts и wp_postmeta
Хранение данных в wp_posts и wp_postmeta
-
Доброго дня !
Подскажите, пожалуйста, как верно организовать хранение данных, получаемых из формы ввода пользователем, содержащей 6-8 полей ? (Соответственно каждая запись будет иметь 6-8 параметров)
Первоначально была мысль создавать собственную таблицу, но понимание множества уже имеющихся в WP средств и методов работы с таблицамиwp_posts
иwp_postmeta
подсказывает актуальность использования данных таблиц. Если предпочтительнее использовать таблицыwp_posts
иwp_postmeta
, то как верно организовать хранение данных: куда записывать данные 6-8 параметров — в поле post_content добавляемой записи таблицыwp_posts
? или же после отправки формы в поле post_content записывать основной параметр, а все остальные (второстепенные) параметры записывать в таблицуpostmeta
как метаданные после создания соответствующей записи в таблицеposts
?Наведите на верную мысль
Заранее благодарен за любую помощь
-
можно ли далее в рамках данного произвольного цикла извлечь определенные мета-поля отдельно для каждой категории выбранных постов ?
А почему нет?
@yube , т.е. в данном произвольном цикле
$query = new WP_Query( array( 'post_type' => 'post', 'post_status' => 'private', 'posts_per_page' => -1 ) ); $posts = $query->posts;
я выбираю все нужные мне записи и затем в цикле
foreach ($posts as $post)
с помощью функцииget_the_terms( $post->ID, 'category' )
проверяю категорию каждого поста (у меня все посты имеют только одну категорию) и в зависимости от категории извлекаю и суммирую мета-поля в определенные переменные, наверное алгоритм такой? а как учитывать наличие определенного значения meta_value в meta_key у определенной категории поста ? ещё один цикл ?в результате получилось в рамках данного произвольного цикла извлечь и обработать в
foreach ($posts as $post)
определенные мета-поля отдельно для каждой категории выбранных постов. @yube , может быть Вы подскажете идею, как в рамках каждой категории при извлечении мета-полей выбирать их учитываяmeta_value
определенногоmeta_key
.
Т.е. сейчас у меня 9 параметров на выходе, а должно получиться 90 т.к. у каждой категории имеется 10 видов населенных пунктов (meta_key=’вид населенного пункта’ meta_value=’одно из 10 значений’). Вот кусочек кода:foreach ($posts as $post) { $terms = get_the_terms( $post->ID, 'category' ); if( $terms ) { $term = array_shift( $terms ); } $term_post = $term->slug; if ($term_post == 'heat') { $heat_price = get_post_meta($post->ID, 'price', true); $heat_power = get_post_meta($post->ID, 'power', true); $sum_heat_price += $heat_price; $sum_heat_power += $heat_power; $heat = 1; } if ($term_post == 'water') { // и так далее
Извините, ничего нового не подскажу.
if/elseif, switch/case — всё как обычно в делается php.@yube , спасибо, буду разбираться. Здесь наверное есть 2 варианта — 1) делать 10 объектов WP_Query, в каждом используя разную переменную запроса мета-данных
'meta_value' => вид населенного пункта
и далее проверять выбранные посты по категории как я и делал. Так ведь можно наверное ? и второй вариант — один объект WP_Query и как вы сказали: if/elseif, switch/case@yube , ещё раз прошу прощения за беспокойство. Голову ломаю не получается найти ошибку. Создал новый объект WP_Query, но он не получает ни одного поста, проблема в параметре ‘tag’ => $area_type — если его убрать, то посты извлекаются, но мне нужно извлечь посты определенной категории с определенной меткой (в $area_type передаю слаг метки)
$query = new WP_Query( array( 'post_type' => 'post', 'post_status' => 'private', 'posts_per_page' => -1, 'tag' => $area_type, 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'name', 'terms' => $category ), ), ) );
В чем моя ошибка ?
нужно извлечь посты определенной категории
Для этого и существует tax_query.
@yube , Но нужно извлечь посты определенной категории с определенной меткой, попробовал так:
'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'category', 'field' => 'name', 'terms' => $category ), array( 'taxonomy' => 'post_tag', 'field' => 'slug', 'terms' => $area_type ), ),
Всё равно не работает. Метки ведь тоже таксономии, такая запись ‘tax_query’ тоже не верна ?
Попробовал использовать meta_query (в произвольных полях у меня так же содержится тип населенного пункта), т.е. выбираю только определенную категорию у которой есть определенное произвольное поле с определенным значением (таких записей у меня не одна, а получаю ноль)
'meta_query' => array( array( 'key' => 'area_type', 'value' => $area_type ), ), 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'name', 'terms' => $category ), ),
@yube , если будет возможность помогите, пожалуйста, натолкните на верный путь так сказать ))
Метки ведь тоже таксономии, такая запись ‘tax_query’ тоже не верна ?
Конечно, таксономия. Похоже на правду. Проверьте соответствие ‘field’ тому, что в переменных.
Посмотрите, какие SQL-запросы генерируются с этими параметрами, попробуйте выполнить их в PMA. Возможно, увидите, что там не так, что лишнее или чего не хватает.
и параметр meta_query я тоже верно прописал ?
да, пока что как бы я не пробовал, не получается
@yube , чтобы посмотреть, какие SQL-запросы генерируются с этими параметрами и выполнить их в phpMyAdmin, нужно установить плагин который вы упоминали ранее, не напомните его название ?@yube , благодаря Вам и этому плагину кажется нашел свою ошибку. Проблема при добавлении записи из фронт-энда и установке для нее в этот момент меток функцией
wp_set_post_tags ()
:Функция создаст новые метки, если не найдет указанные. Если указать название (в кириллице), то функция создаст метку. При этом: название будет названием, слаг слагом (обработается как обычно).
Я привязываю метки через название в кириллице и обнаружил, что у меня создается новая метка с таким же названием которое есть, но с другим id.
т.е лучше привязывать метки по id ? или можно и по слагу ?и тогда может быть существует штатная функция, чтобы определить id метки через её слаг или название?
- Тема «Хранение данных в wp_posts и wp_postmeta» закрыта для новых ответов.