Tycoon Talk
Become a Big fish!
The number 1 forum for online business!
Post topics, ask questions, share your knowledge.
Tycoon Talk is part of Freelancer.com - find skilled workers online at a fraction of the cost.

PHP Forum


You are currently viewing our PHP Forum as a guest. Please register to participate.
Login



Freelance Jobs

Reply
Custom Meta Box Issue - Wordpress
Old 07-27-2012, 01:05 AM Custom Meta Box Issue - Wordpress
fotogrph's Avatar
Novice Talker

Posts: 11
Name: Adonis
Location: TN
Trades: 0
I'm having a wierd issue with my custom meta boxes. They appear correctly on posts and on custom page templates. But, on the default page template they will load when you create a new page. After you hit publish or save the meta boxes dissappear.

This is the Meta Class

PHP Code:

class ARIXWP_Meta {
    
    private 
$meta     null;
    public 
$postid    null;
    private 
$template null;
    
    function 
__construct() {
        
add_action('save_post',array(&$this'save_meta_data'));
    }
    
    function 
__destruct() {
        
$this->meta     null;
        
$this->postid   null;
        
$this->template null;
    }
    
    public function 
init_meta() {
        
add_action('admin_init',array(&$this'add_meta'));
    }
    
    public function 
add_meta() {
        if (
$this->meta['template'] == $this->template) {
            
add_meta_box($this->meta['id'], $this->meta['title'],  array(&$this'format_meta'), $this->meta['post_type'],  $this->meta['context'], $this->meta['priority']);    
        }
    }
    
    public function 
format_meta() {
        global 
$post;
        
        if (!isset(
$post)) return false;
        
        if (
$this->meta['post_type'] != $post->post_type) return false;
        
        
$this->set_postid($post->ID);
        
        
// Use nonce for verification
        
echo '<input type="hidden" name="' .  $this->meta['nonce_name'] . '" value="',  wp_create_nonce(basename(__FILE__)), '" />';
        
        foreach (
$this->meta['fields'] as $field) {
            
// get current post meta data
            
$meta get_post_meta($post->ID$field['id'], true);
       
            if (isset(
$field['before']) && $field['before'] != "") {
              echo 
'<p class="heading">' $field['before'] . '</p>';
            }
            
            echo 
'<label for="'$field['id'] .'" class="arixwp_label">'$field['name']. '</label><p>';
            
            if (isset(
$field['desc']) && $field['desc'] != "") {
              echo 
'<p class="arixwp_text">' $field['desc'] . '</p>';
            }
            
            if ( 
$field['type'] == 'radio' )
                echo 
'<div class="arixwp_radio">';
            
            switch (
$field['type']) {
                case 
'text':
                    echo 
'<input type="text" name="'$field['id'].  '" id="'$field['id'] .'" value="'. ($meta $meta $field['default'])  . '" class="arixwp_admin_input" />''<br />';
                    break;
                case 
'textarea':
                    echo 
'<textarea name="'$field['id']. '" id="'.  $field['id']. '" cols="60" rows="4" class="arixwp_admin_input">'.  ($meta $meta $field['default']) . '</textarea>''<br  />';
                    break;
                case 
'select':
                    echo 
'<select name="'$field['id'] . '" id="'$field['id'] . '" class="arixwp_admin_select">';
                    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'] . '<br />';
                        
echo '<input type="radio" id="' $field[  'id' ] . $option['value'] . '" name="' $field'id' ] . '" value="' .  $option['value'] . '"' . ( $meta == $option'value' ] ? '  checked="checked"' '' ) . ' /><label for="' $field'id' ] .  $option['value'] . '">' $option'name' ] . '</label>'
                    }
                    break;
                case 
'checkbox':
                    echo 
'<input type="checkbox" name="' .  $field['id'] . '" id="' $field['id'] . '"' . ( $meta '  checked="checked"' '' ) . ' />';
                    break;
            }
            
            if ( 
$field['type'] == 'radio' )
                echo 
'</div>';
                
           
// echo     '</p>';
        
}
    }
    
    public function 
save_meta_data($post_id) {
        global 
$post;
        
        if (!isset(
$post->ID)) {
            
$post get_post($post_id);
        }
        
        
$this->set_postid($post->ID);
        
$this->meta $this->get_meta();
        
        if (
$this->meta['post_type'] != $post->post_type) return $post_id;
                
        
$_POST[$this->meta['nonce_name']] =  isset($_POST[$this->meta['nonce_name']]) ?  $_POST[$this->meta['nonce_name']] : "";
        
        
//Verify nonce
        
if (!wp_verify_nonce($_POST[$this->meta['nonce_name']], basename(__FILE__))) {
            return 
$post_id;
        }
                
        
//Check autosave
        
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
            return 
$post_id;
        }
     
        
//Check permissions
        
if (isset($_POST['post_type']) && '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 (
$this->meta['fields'] as $field) {
            
            
$old get_post_meta($post_id$field['id'], true);
            
$new = isset($_POST[$field['id']]) ? $_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);
            }
        }
    }
    
    public function 
set_postid($axPostId 0) {
        
$postID  null;
        
$postID2 null;
        
        if (
$axPostId 0) {
            
$this->postid $axPostId;
        } else {
            
            if ( isset( 
$_GET['post'] ) ) {
                
                
$postID  filter_var$_GET['post'], FILTER_VALIDATE_INT );
            
                if ( isset( 
$_POST['post_ID'] ) ) {
                    
$postID2 filter_var$_POST['post_ID'], FILTER_VALIDATE_INT );
                } else {
                    
$postID2 '';
                }
            
                
$this->postid $postID $postID $postID2 ;        
            }
        }
    }
    
    public function 
get_postid() {
        return 
$this->postid;
    }
    
    public function 
set_template() {
        
$this->template get_post_meta($this->postid,'_wp_page_template',TRUE);
    }
    
    public function 
get_template() {
        return 
$this->template;
    }
    
    public function 
set_meta($axMeta) {
        
update_post_meta($this->postid'_arixwp_field_meta'serialize($axMeta));
        
$this->meta $axMeta;
    }
    
    public function 
get_meta() {
        if (
is_null(($this->meta))) {
            
$this->meta unserialize(get_post_meta($this->postid,'_arixwp_field_meta',TRUE));
        }
        return 
$this->meta;
    }

This is how i am calling the meta boxes:

PHP Code:
    $meta_template '';
    
$meta_posttype 'page';
    
$meta_title    'Page Options';
    
$meta_context  'normal';
    
$meta_priority 'high';
    
$meta_id       'page-meta';
    
$meta_nonce    $meta_id '-nonce';
    
$arixwp_meta       = new ARIXWP_Meta();
    
    
$arixwp_meta->set_postId();
    
$arixwp_meta->set_template();
    
$arixwp_template  $arixwp_meta->get_template();
    
    if (
$arixwp_template == $meta_template) {
        
$arixwp_meta->set_meta(array(
           
            
//This is the id applied to the meta box
            
'id'         => $meta_id,
            
            
//This is the post type the meta is for
            
'post_type'  => $meta_posttype,
            
            
//This is the template to show the meta for
            
'template'   => $meta_template,
            
            
//This is the nonce for this meta
            
'nonce_name' => $meta_nonce,
           
            
//This is the title that appears on the meta box container
            
'title'      => $meta_title,
    
            
//This defines the part of the page where the edit screen section should be shown
            
'context'    => $meta_context,    
           
            
//This sets the priority within the context where the boxes should show
            
'priority'   => $meta_priority,
           
            
//Here we define all the fields we want in the meta box
            
'fields' => array(    
                        
            
// Show or hide featured posts
                        
                
array(
                    
'before'     => '',
                    
'after'     => '',
                    
'name'         => __'Show Featured Posts'THEMENAME ),
                    
'desc'         => __'This allows you to show or  hide the featured posts banner on this page. ( Note: this will override  the setting in the themes control panel. )'THEMENAME ),
                    
'id'        => '_arixwp_featured_show_page',
                    
'type'         => 'radio'// text,textarea,select,radio,checkbox
                    
'default'     => 'home',
                    
'options'     => array(
                        array(
'name' => __' Yes'THEMENAME ), 'value' => 'yes'),
                        array(
'name' => __' No'THEMENAME ), 'value' => 'no')
                    )                                
                ),    
                        
            
// Featured Posts Display Method
                        
                
array(
                    
'before'     => '',
                    
'after'     => '',
                    
'name'         => __'Featured Post Display'THEMENAME ),
                    
'desc'         => __'This controls how your  featured posts are displayed. You can show one main feature and 3 normal  features, one main feature only, three normal features only, or a  jQuery slider that slides through the latest 4 posts in the featured  category. 'THEMENAME ),
                    
'id'        => '_arixwp_featured_display_page',
                    
'type'         => 'radio'// text,textarea,select,radio,checkbox
                    
'default'     => 'four',
                    
'options'     => array(
                        array(
'name' => __' Main Feature &amp; 3  Normal Features'THEMENAME ), 'value' => 'four''class' =>  'wparix_feature_four' ),
                        array(
'name' => __' Main Feature Only',  THEMENAME ), 'value' => 'one''class' => 'wparix_feature_one' ),
                        array(
'name' => __' 3 Normal Features  Only'THEMENAME ), 'value' => 'three''class' =>  'wparix_feature_three' ),
                        array(
'name' => __' Slidertron Slider',  THEMENAME ), 'value' => 'slide''class' => 'wparix_feature_slide'  )
                    )                                
                ),
                            
            
// Sidebar Location
                        
                
array (
                    
'before'     => '',
                    
'after'     => '',
                    
'name'         => __'Sidebar Location'THEMENAME ),
                    
'desc'         => __'This allows you to override the default sidebar settings.'THEMENAME ),
                    
'id'         => '_arixwp_sidebar_page',
                    
'type'         => 'radio'// text,textarea,select,radio,checkbox
                    
'default'     => 'left',
                    
'options'     => array(
                        array(
'name' => ' Left''value' => 'left'),
                        array(
'name' => ' Right''value' => 'right'),
                        array(
'name' => ' None''value' => 'none')
                    )                                
                ),                                    
                
            )
        ));
        
        
$arixwp_meta->init_meta();
    }
    
    
$arixwp_meta null
If i switch the $meta_posttype to post or leave it as page and set the $meta_template it works fine. Please help I am totally stumped.
__________________

Please login or register to view this content. Registration is FREE


Please login or register to view this content. Registration is FREE
fotogrph is offline
Reply With Quote
View Public Profile Visit fotogrph's homepage!
 
 
Register now for full access!
Old 07-30-2012, 11:45 AM Re: Custom Meta Box Issue - Wordpress
mgraphic's Avatar
Truth Seeker

Latest Blog Post:
JAMISONTUNES
Posts: 2,960
Name: Keith Marshall
Location: Connecticut
Trades: 0
Your line:
if ($arixwp_template == $meta_template)

Looks like it would skip the entire logic if left empty
__________________

<mgraphic /> - I don't have a solution but I admire the problem.
mgraphic is offline
Reply With Quote
View Public Profile
 
Reply     « Reply to Custom Meta Box Issue - Wordpress
 

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off





   
RSS Feed  Feeds: RSS   JS   XML
RSS Feed  Feeds for this forum: RSS   JS   XML



Page generated in 0.84000 seconds with 11 queries