Настраиваемое Поле — Могу Ли Я Классифицировать Мета-Поле?

  • Автор темы Pawel37
  • Обновлено
  • 16, Oct 2024
  • #1

У меня есть этот код

 
 <?php
$prefix = 'wtf_';

$meta_box = array(

'id' => 'propertybox',

'title' => 'Property listing details',

'page' => 'listings',

'context' => 'normal',

'priority' => 'high',

'fields' => array(

array(

'name' => 'Propert ID number',

'desc' => 'Enter a property ID number, if any ',

'id' => $prefix . 'pid',

'type' => 'text',

'std' => ''

),

array(

'name' => 'Bath',

'desc' => 'Number of bathrooms.',

'id' => $prefix . 'bath',

'type' => 'text',

'std' => ''

),

),

);

$meta_box = array(

'id' => 'mansionbox',

'title' => 'mansion listing details',

'page' => 'listings',

'context' => 'normal',

'priority' => 'high',

'fields' => array(      

array(

'name' => 'An',

'desc' => 'Anul constructiei',

'id' => $prefix . 'an',

'type' => 'text',

'std' => ''

),      

array(

'name' => 'Etaj',

'desc' => 'Etajul',

'id' => $prefix . 'etaj',

'type' => 'text',

'std' => ''

),      

array(

'name' => 'Balcone',

'desc' => 'Numar balcoane',

'id' => $prefix . 'balcon',

'type' => 'text',

'std' => ''

),      

array(

'name' => 'Parcare',

'desc' => 'Numar locuri de parcare',

'id' => $prefix . 'parcare',

'type' => 'text',

'std' => ''

),      

array(

'name' => 'Suprafata totala',

'desc' => 'Suprafata totala a terenului (Casa/vila)',

'id' => $prefix . 'suprafatatotala',

'type' => 'text',

'std' => ''

),      

array(

'name' => 'Front stradal',

'desc' => 'Suprafata front stradal',

'id' => $prefix . 'front',

'type' => 'text',

'std' => ''

),      

array(

'name' => 'Suprafata curte libera ',

'desc' => 'Suprafata curte libera ',

'id' => $prefix . 'suprafatacurte',

'type' => 'text',

'std' => ''

),      

array(

'name' => 'Amprenta casei ',

'desc' => 'Suprafata amprentei  ',

'id' => $prefix . 'amprenta',

'type' => 'text',

'std' => ''

),      

array(

'name' => 'Regim inaltime',

'desc' => 'Regim inaltime  ',

'id' => $prefix . 'inaltime',

'type' => 'text',

'std' => ''

),      

array(

'name' => 'Certificat urbanism ',

'desc' => 'certificat urbanism',

'id' => $prefix . 'certificat',

'type' => 'text',

'std' => ''

),      

array(

'name' => 'Asking price',

'desc' => 'Enter the actual asking price ',

'id' => $prefix . 'price',

'type' => 'text',

'std' => ''

)

),

);
 

Я хочу, чтобы первые 3 (собственный идентификационный номер, ванна, номер) были отнесены к категории в списке недвижимости, а остальные - в подробном списке особняков.

настраиваемое поле — Могу ли я классифицировать мета-поле?

Я сделал это: но он не будет показывать первое поле, теперь в поле свойств отображается только окно особняка.

<?php $prefix = 'wtf_'; $meta_box = array( 'id' => 'propertybox', 'title' => 'Property listing details', 'page' => 'listings', 'context' => 'normal', 'priority' => 'high', 'fields' => array( array( 'name' => 'Propert ID number', 'desc' => 'Enter a property ID number, if any ', 'id' => $prefix . 'pid', 'type' => 'text', 'std' => '' ), array( 'name' => 'Bath', 'desc' => 'Number of bathrooms.', 'id' => $prefix . 'bath', 'type' => 'text', 'std' => '' ), array( 'name' => 'An', 'desc' => 'Anul constructiei', 'id' => $prefix . 'an', 'type' => 'text', 'std' => '' ), array( 'name' => 'Etaj', 'desc' => 'Etajul', 'id' => $prefix . 'etaj', 'type' => 'text', 'std' => '' ), array( 'name' => 'Balcone', 'desc' => 'Numar balcoane', 'id' => $prefix . 'balcon', 'type' => 'text', 'std' => '' ), array( 'name' => 'Parcare', 'desc' => 'Numar locuri de parcare', 'id' => $prefix . 'parcare', 'type' => 'text', 'std' => '' ), array( 'name' => 'Suprafata totala', 'desc' => 'Suprafata totala a terenului (Casa/vila)', 'id' => $prefix . 'suprafatatotala', 'type' => 'text', 'std' => '' ), array( 'name' => 'Front stradal', 'desc' => 'Suprafata front stradal', 'id' => $prefix . 'front', 'type' => 'text', 'std' => '' ), array( 'name' => 'Suprafata curte libera ', 'desc' => 'Suprafata curte libera ', 'id' => $prefix . 'suprafatacurte', 'type' => 'text', 'std' => '' ), array( 'name' => 'Amprenta casei ', 'desc' => 'Suprafata amprentei ', 'id' => $prefix . 'amprenta', 'type' => 'text', 'std' => '' ), array( 'name' => 'Regim inaltime', 'desc' => 'Regim inaltime ', 'id' => $prefix . 'inaltime', 'type' => 'text', 'std' => '' ), array( 'name' => 'Certificat urbanism ', 'desc' => 'certificat urbanism', 'id' => $prefix . 'certificat', 'type' => 'text', 'std' => '' ), array( 'name' => 'Asking price', 'desc' => 'Enter the actual asking price ', 'id' => $prefix . 'price', 'type' => 'text', 'std' => '' ) ), ); add_action('admin_menu', 'mytheme_add_box'); // Add meta box function mytheme_add_box() { global $meta_box; add_meta_box($meta_box['id'], $meta_box['title'], 'mytheme_show_box', $meta_box['page'], $meta_box['context'], $meta_box['priority']); } // Callback function to show fields in meta box function mytheme_show_box() { global $meta_box, $post; // Use nonce for verification echo '<input type="hidden" name="mytheme_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />'; echo '<table class="form-table">'; foreach ($meta_box['fields'] as $field) { // get current post meta data $meta = get_post_meta($post->ID, $field['id'], true); echo '<tr>', '<th style="width:20%"><label for="', $field['id'], '">', $field['name'], '</label></th>', '<td>'; switch ($field['type']) { case 'text': echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" size="30" style="width:97%" />', '<br />', $field['desc']; break; case 'textarea': echo '<textarea class="theEditor" name="', $field['id'], '" id="', $field['id'], '" cols="60" rows="4" style="width:97%">', $meta ? $meta : $field['std'], '</textarea>', '<br />', $field['desc']; break; case 'select': echo '<select name="', $field['id'], '" id="', $field['id'], '">'; foreach ($field['options'] as $option) { echo '<option', $meta == $option ? ' selected="selected"' : '', '>', $option, '</option>'; } echo '</select>', '<br />', $field['desc']; break; case 'radio': foreach ($field['options'] as $option) { echo '<input type="radio" name="', $field['id'], '" value="', $option['value'], '"', $meta == $option['value'] ? ' checked="checked"' : '', ' />', $option['name']; } break; case 'checkbox': echo '<input type="checkbox" name="', $field['id'], '" id="', $field['id'], '"', $meta ? ' checked="checked"' : '', ' />'; break; } echo '<td>', '</tr>'; } echo '</table>'; } add_action('save_post', 'mytheme_save_data'); // Save data from meta box function mytheme_save_data($post_id) { global $meta_box; // verify nonce if (!wp_verify_nonce($_POST['mytheme_meta_box_nonce'], basename(__FILE__))) { return $post_id; } // check autosave if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; } // check permissions if ('page' == $_POST['post_type']) { if (!current_user_can('edit_page', $post_id)) { return $post_id; } } elseif (!current_user_can('edit_post', $post_id)) { return $post_id; } foreach ($meta_box['fields'] as $field) { $old = get_post_meta($post_id, $field['id'], true); $new = $_POST[$field['id']]; if ($new && $new != $old) { update_post_meta($post_id, $field['id'], $new); } elseif ('' == $new && $old) { delete_post_meta($post_id, $field['id'], $old); } } } ?>

#настраиваемое поле #metabox

Pawel37


Рег
06 Apr, 2017

Тем
68

Постов
204

Баллов
554
  • 25, Oct 2024
  • #2

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

Вы можете определить столько мета-полей, сколько вам нужно, и поместить в каждое мета-поле нужные поля. Например:

 
 
 $metaboxes = array();

$prefix = 'wtf_';

$metaboxes[] = array(

'id' => 'propertybox',

.. other settings here
);

$metaboxes[] = array(

'id' => 'mansionbox',

.. other settings here
);

foreach ( $metaboxes as $metabox ) {

// put here the code you are using to add the metabox
}
 

Адаптация вашего кода с помощью этого подхода (полностью функционального):

$meta_box ||answer||

Ваша проблема в том, что $meta_box = array( is used for both metaboxes, so the $prefix = 'wtf_'; $property_fields = array( array( 'name' => 'Propert ID number', 'desc' => 'Enter a property ID number, if any ', 'id' => $prefix.'pid', 'type' => 'text', 'std' => '' ), array( 'name' => 'Bath', 'desc' => 'Number of bathrooms.', 'id' => $prefix.'bath', 'type' => 'text', 'std' => '' ), array( 'name' => 'An', 'desc' => 'Anul constructiei', 'id' => $prefix.'an', 'type' => 'text', 'std' => '' )); $mansion_fields = array( array( 'name' => 'Etaj', 'desc' => 'Etajul', 'id' => $prefix . 'etaj', 'type' => 'text', 'std' => '' ), array( 'name' => 'Balcone', 'desc' => 'Numar balcoane', 'id' => $prefix . 'balcon', 'type' => 'text', 'std' => '' ), array( 'name' => 'Parcare', 'desc' => 'Numar locuri de parcare', 'id' => $prefix . 'parcare', 'type' => 'text', 'std' => '' ), array( 'name' => 'Suprafata totala', 'desc' => 'Suprafata totala a terenului (Casa/vila)', 'id' => $prefix . 'suprafatatotala', 'type' => 'text', 'std' => '' ), array( 'name' => 'Front stradal', 'desc' => 'Suprafata front stradal', 'id' => $prefix . 'front', 'type' => 'text', 'std' => '' ), array( 'name' => 'Suprafata curte libera ', 'desc' => 'Suprafata curte libera ', 'id' => $prefix . 'suprafatacurte', 'type' => 'text', 'std' => '' ), array( 'name' => 'Amprenta casei ', 'desc' => 'Suprafata amprentei ', 'id' => $prefix . 'amprenta', 'type' => 'text', 'std' => '' ), array( 'name' => 'Regim inaltime', 'desc' => 'Regim inaltime ', 'id' => $prefix . 'inaltime', 'type' => 'text', 'std' => '' ), array( 'name' => 'Certificat urbanism ', 'desc' => 'certificat urbanism', 'id' => $prefix . 'certificat', 'type' => 'text', 'std' => '' ), array( 'name' => 'Asking price', 'desc' => 'Enter the actual asking price ', 'id' => $prefix . 'price', 'type' => 'text', 'std' => '' )); add_action( 'add_meta_boxes', 'my_meta_boxes' ); function my_meta_boxes(){ //Don't forget to change "post" with post_type where you want to add the metaboxes add_meta_box("propertybox", "Property Options", "propertybox", "listings", "normal", "high"); add_meta_box("mansionbox", "Mansion Options", "mansionbox", "listings", "normal", "high"); } function propertybox(){ global $prefix; global $property_fields; //Put here the fields you want display inside the "Property options" box. build_fieds($property_fields); } function mansionbox(){ global $prefix; global $mansion_fields; build_fieds($mansion_fields); } function build_fieds($fields){ global $post; echo '<table class="form-table">'; foreach ($fields as $field) { // get current post meta data $meta = get_post_meta($post->ID, $field['id'], true); echo '<tr>', '<th style="width:20%"><label for="', $field['id'], '">', $field['name'], '</label></th>', '<td>'; switch ($field['type']) { case 'text': echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" size="30" style="width:97%" />', '<br />', $field['desc']; break; case 'textarea': echo '<textarea class="theEditor" name="', $field['id'], '" id="', $field['id'], '" cols="60" rows="4" style="width:97%">', $meta ? $meta : $field['std'], '</textarea>', '<br />', $field['desc']; break; case 'select': echo '<select name="', $field['id'], '" id="', $field['id'], '">'; foreach ($field['options'] as $option) { echo '<option', $meta == $option ? ' selected="selected"' : '', '>', $option, '</option>'; } echo '</select>', '<br />', $field['desc']; break; case 'radio': foreach ($field['options'] as $option) { echo '<input type="radio" name="', $field['id'], '" value="', $option['value'], '"', $meta == $option['value'] ? ' checked="checked"' : '', ' />', $option['name']; } break; case 'checkbox': echo '<input type="checkbox" name="', $field['id'], '" id="', $field['id'], '"', $meta ? ' checked="checked"' : '', ' />'; break; } echo '<td>', '</tr>'; } echo '</table>'; } add_action('save_post', 'mytheme_save_data'); // Save data from meta box function mytheme_save_data($post_id) { global $mansion_fields; global $property_fields; // check autosave if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; } // check permissions if ('page' == $_POST['post_type']) { if (!current_user_can('edit_page', $post_id)) { return $post_id; } } elseif (!current_user_can('edit_post', $post_id)) { return $post_id; } foreach ($property_fields as $field) { $old = get_post_meta($post_id, $field['id'], true); $new = $_POST[$field['id']]; if ($new && $new != $old) { update_post_meta($post_id, $field['id'], $new); } elseif ('' == $new && $old) { delete_post_meta($post_id, $field['id'], $old); } } foreach ($mansion_fields as $field) { $old = get_post_meta($post_id, $field['id'], true); $new = $_POST[$field['id']]; if ($new && $new != $old) { update_post_meta($post_id, $field['id'], $new); } elseif ('' == $new && $old) { delete_post_meta($post_id, $field['id'], $old); } } } переменная переопределяется во втором назначении, и, конечно, php понимает, что вы хотите добавить один метабокс, а не два.

вам нужно сделать что-то вроде этого:

add_action( 'add_meta_boxes', 'my_meta_boxes' ); function my_meta_boxes(){ //We define the two metaboxes I want add_meta_box("propertybox", "Property Options", "propertybox", "listings", "normal", "high"); add_meta_box("mansionbox", "Mansion Options", "mansionbox", "listings", "normal", "high"); } //Function for propertybox function propertybox(){ //Write here the HTML for the output of the "Property" metabox } //Function for mansionbox function mansionbox(){ //Write here the HTML for the output of the "Mansion" metabox }
 

ZovshTumb


Рег
04 Aug, 2014

Тем
73

Постов
165

Баллов
540
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно