Intereting Posts
Получить идентификатор видеообъявления и длину экрана Добавить Incrementing ID в каждый абзац in_content Рабочий виджет не отображается по внешнему виду -> виджеты Как отобразить количество сообщений для нескольких пользовательских типов сообщений? Как использовать область виджетов для расширения содержимого страницы? Контактная форма 7 + Конфигурация SMTP: письмо отправителя появляется как мое собственное электронное письмо В чем смысл User-agent и Disallow в файле robots.txt в wordpress изменить время публикации на нескольких сообщениях XML Sitemap Generator и 404 проблема Удалить по умолчанию quicktags Показывать сообщения только автору Есть ли хороший способ использовать SVN для каталога загрузок? Почему минимальная защита защищена? как перенаправить старые сообщения в блоге, когда изменяются постоянные ссылки Может ли плагин по-прежнему влиять на сайт даже после удаления?

Сохранение настраиваемых полей для WP_Query для извлечения

Заранее спасибо за любую помощь. Я пишу плагин для WordPress, который имеет несколько пользовательских типов сообщений, разделяющих некоторые настраиваемые мета-поля и поля. У меня все правильно работает и сохраняется, но я столкнулся с проблемой, когда мне нужно получить отфильтрованные данные с WP_Query на основе значений в настраиваемых полях.

Следуя некоторым примерам в Интернете и ссылаясь на код, я имею следующее

Мой код мета-кода ниже

<label>Listing Type</label> <select id="details_listing_type" name="details_listing_type" value="'.$detailsData["details_listing_type"].'"> 

В My Save Routine Im do

 if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( !wp_verify_nonce( $_POST['details_noncename'], plugin_basename( __FILE__ ) ) ) return; if ( !current_user_can( 'edit_post', $post_id ) ) return; $detailsData = array(); foreach($_POST as $key => $data) { if($key == 'details_noncename') continue; if(preg_match('/^details_listing/i', $key)) { $detailsData [$key] = $data; } } update_post_meta($post_id, 'details_listing', $detailsData ); return $detailsData ; 

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

Теперь я хочу использовать WP_Query для фильтрации моих сообщений по значению «details_listing_type», но форма, которую я могу понять, состоит в том, что, поскольку она сериализована, мне нужно использовать пользовательский запрос для этого.

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

Может ли кто-нибудь объяснить, как я могу использовать свой код, чтобы я все еще мог использовать WP_Query и хранить каждое поле со своим собственным ключом?

Спасибо еще раз за помощь

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

  /* check if this is an autosave and if YES then do nothing */ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; /* Verify the nonce field of the meta box */ if ( !wp_verify_nonce( $_POST['propdp_details_noncename'], plugin_basename( __FILE__ ) ) ) return; /* Check if the user can edit the post and if NOT the return and do nothing */ if ( !current_user_can( 'edit_post', $post_id ) ) return; /* start my array object to hold all my data to save */ $detailsData = array(); /* run through $_POST to check for all matching keys and values */ foreach($_POST as $key => $data) { if($key == 'propdp_details_noncename') continue; if(preg_match('/^propdp_details/i', $key)) { $detailsData [$key] = $data; } } /* loop through all gathered keys and values to add, update and delete meta */ foreach($detailsData as $meta_key => $new_value) { //get old value of meta key $curr_value = get_post_meta( $post_id, $meta_key, true ); //check if old value exists and add if OLD NOT EXIST if($new_value && '' == $curr_value) { add_post_meta( $post_id, $meta_key, $new_value, true ); } //check if old value == new value and update if NEW NOT EQUAL elseif($new_value && $new_value != $curr_value) { update_post_meta( $post_id, $meta_key, $new_value); } //check if new value exists and delete if NEW NOT EXIST elseif('' == $new_value && $curr_value) { delete_post_meta( $post_id, $meta_key, $curr_value); } } 

Это позволило мне использовать мой массив аргументов WP_Query, как это

 $myQueryArr = array( 'post_type' => array('custom', 'post', 'types'), 'post_status' => 'publish', 'meta_query' => array( array( 'key'=>'propdp_details_listing_agent', 'value'=>$currentID ) ) );