0

I have 3 custom post types and 3 meta box files. The problem is I include files in functions.php. I have three meta box PHP files for each custom post type, but it just shows one meta box fields of custom post which is recently added. Example:

functions.php :

include 'inc/referanslar.php';
include 'inc/hizmetler/hizmetler.php';
include 'inc/projeler.php',
include 'inc/projeler-meta-box.php',
include 'inc/hizmetler/hizmetler-meta-box.php';
include 'inc/referanslar-meta-box.php';

It just shows referanslar-meta-box.php because it's under all files. Here are my meta box files:

hizmetler-meta-box.php :

/*
* Plugin Name: Hizmetler Özel Alanlar
* Author: Erdinç Taze
* Author URI: http://erdinctaze.com/
*/
$prefix = 'ozellikler_'; 
$meta_box = array(
'id' => 'my-meta-box',
'title' => 'Hizmet Özellikleri',
'page' => 'hizmetler',
'context' => 'normal',
'priority' => 'high',
'fields' => array(
array(

'name' => 'Hizmet İkon',
'desc' => 'Lütfen hizmet ikonunuzu seçiniz',
'id' => $prefix . 'hizmetikon',
'type' => 'select',
'options' => array('web-design', 'google-apps', 'graphic-design', 'web-development', 'seo', 'mobile-app', 'social-media-promotion', 'online-promotion', 'web-application', 'orm')
),
array(
'name' => 'Hizmet Bağlantı Adresi',
'desc' => 'Lütfen devamını oku butonuna tıklandığında gidilecek bağlantıyı giriniz.',
'id' => $prefix . 'hizmeturl',
'type' => 'text',
),

)
); 
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 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>';
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);
}
}
}

referanslar-meta-box.php :

/*
* Plugin Name: Referanslar Özel Alanlar
* Author: Erdinç Taze
* Author URI: http://erdinctaze.com/
*/
$prefix = 'erdinc_'; 
$meta_box = array(
'id' => 'referans_meta_box',
'title' => 'Referans Ayrıntılar',
'page' => 'logolar',
'callback' => 'show_custom_meta_box',
'context' => 'normal',
'priority' => 'high',
'fields' => array(
array(
'name' => 'Yapılan İşlemler',
'desc' => 'Lütfen firma için yapılan hizmetleri belirtiniz.',
'id' => $prefix . 'islemler',
'type' => 'text',
),
array(
'name' => 'Referans URL',
'desc' => 'Lütfen referans butonuna tıklandığında gidilecek bağlantıyı giriniz.',
'id' => $prefix . 'referansurl',
'type' => 'text',
),
)
); 
add_action('admin_menu', 'mytheme_add_box'); 
// Add meta box
function referans_add_box() {
global $meta_box; 
add_meta_box($meta_box['id'], $meta_box['title'], 'mytheme_show_box', $metabox['callback'], $meta_box['page'], $meta_box['context'], $meta_box['priority']);
} 
// Callback function to show fields in meta box
function referans_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 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>';
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 referans_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);
}
}
}
0

1 Answer 1

0

Without adding your custom post type, it looks like you've got the function called wrong on the second one

add_action('admin_menu', 'mytheme_add_box'); 
// Add meta box
function referans_add_box() {

Do you want to say

add_action('admin_menu', 'referans_add_box'); 
// Add meta box
function referans_add_box() {
6
  • I edited as u said but the problem still occurs. Commented Apr 30, 2016 at 17:59
  • Check the second hook -> add_action('save_post', 'mytheme_save_data');
    – Howard E
    Commented Apr 30, 2016 at 18:00
  • I recently edited this line also. But didnt help Commented Apr 30, 2016 at 18:11
  • If you comment out the first meta box file from the functions.php does the second one work then?
    – Howard E
    Commented Apr 30, 2016 at 18:43
  • Yeap, for instance; if i put referanslar-meta-box.php last line on functions.php it works and the others doesnt work. But if i put hizmetler-meta-box.php last line it works then and others doesnt work. Commented Apr 30, 2016 at 19:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.