get_post_type () и проблема WP_QUERY

У меня проблема с WP_Query, Мой сценарий: a) Использование http://wordpress.org/extend/plugins/countries/ b) Использование WP_Query для выбора стран и их кодов. c) правильно выполнить сброс запроса. d) использование настраиваемого типа сообщений e) с использованием мета-полей f) с использованием метода get_post_type () для получения настраиваемого типа сообщений.

Вот фрагмент кода:

$query_args = array( 'post_type' => 'countries', 'posts_per_page' => -1, 'post_status' => 'publish' ); $countries_query = new WP_Query($query_args); $countries_array = array(); if ($countries_query->have_posts()): while ($countries_query->have_posts()) : $countries_query->the_post(); $country_meta = get_post_custom($post->ID); $country_code = $country_meta['country_code'][0]; //$countries_array[$country_code] = $post->post_name; $countries_array[$country_code] = $post->post_title; endwhile; endif; wp_reset_postdata(); /* * sorting countries alphabatically, keeps keys intact with "ksort" */ ksort($countries_array); $GLOBALS['custom_countries'] = $countries_array; 

и я добавляю мета-поле в свой собственный тип сообщения, используя

 if (get_post_type() == 'my_custom_post_type'): add_my_meta_box_for_custom_post_type(); endif; 

и get_post_type () возвращает «страны» вместо глобальной $ post, которая в этом случае относится к моему «my_custom_post_type».

Что-то не так с моим кодом ?????

Ответьте только, если у вас есть конкретные ответы, а не общие ответы или спекуляции.

Solutions Collecting From Web of "get_post_type () и проблема WP_QUERY"

Если вы посмотрите на источник и страницу Codex для get_post_type вы увидите, что возвращает тип «текущего сообщения», если вы не передадите ему идентификатор сообщения или пост-объект. get_post_type должен работать без параметра, если вы используете этот код на страницах ( get_post_type созданных WordPress для типов сообщений. В любом другом месте, и это не гарантируется. Невозможно дать вам специфику, потому что ваши вопросы не содержат достаточно конкретной информации, но я уверен, что это проблема, с которой вы сталкиваетесь с кодом.

Тем не менее, @WPThemes прав. Эта проверка не нужна. Этот ответ должен решить проблемы для вас (так что выбирайте его).

Дополнительные примечания. Если вы регистрируете свои обмены в обратном вызове (ответ @WPThemes), когда вы регистрируете тип сообщения, вы можете обойтись is_admin проверки is_admin . Ящики будут регистрироваться, когда они понадобятся. вы также можете напрямую подключиться к add_meta_boxes_{post-type} .

Вам не нужно проверять, чтобы пользовательский тип сообщения добавлял мета-поля. Вам нужно только указать, какой пользовательский тип сообщения вам нужен функция add_meta_box (), которую вы хотите запустить. Что-то вроде этого:

 add_action('add_meta_boxes', 'add_my_meta_box' ); /** * Add meta box only to my custom post type */ function add_my_meta_box(){ $my_custom_post_type = 'my_custom_post_type'; add_meta_box( 'my-meta-box-id', 'Title of my Meta Box', 'my_callback_function', $my_custom_post_type, 'normal', 'high' ); } /** * Shows the meta box options */ function my_callback_function(){ /** Display your meta box options/fields **/ }