it-swarm.com.de

Benutzerdefiniertes Metabox-Array vom Typ "Post"

Ich versuche, einen benutzerdefinierten Beitragstyp mit einem benutzerdefinierten Metabox-Array zu erstellen. Wie kann ich einen automatischen Beitragstyp für diese Art erstellen? Ich denke, ich muss ein zweidimensionales Array verwenden. Aber wie kann ich mein Datenarray automatisch füllen? Und wie kann ich diese Art Array speichern.

Könnte mich jemand in die richtige Richtung weisen?

Bitte werfen Sie einen Blick auf die Bilder.

Img1

Zweites Bild enter image description here

Mein Code bisher:

<?php
//add custom field - price
add_action("admin_init", "price");

function object_init(){
  add_meta_box("price_meta", "Price fields :", "object", "price_meta", "normal", "low");

}


function price_meta(){
 global $post;
  $custom = get_post_custom($post->ID);
  $price = $custom["price"][0];
  ?>

  <p style="float:left;"><label>Nr :</label><br />
    <input type="text" name="priceNr" size="10" value="<?php echo $price; ?>"/>
</p>
  <p style="float:left;"><label>Description :</label><br />
    <input type="text" name="priceD" size="50" value="<?php echo $price; ?>"/>
</p>
  <p style="float:left;"><label>Price :</label><br />
    <input type="text" name="price" size="20" value="<?php echo $price; ?>"/>
</p>

  <?php
}
//Save product price
add_action('save_post', 'save_detailss');

function save_detailss(){ 
global $post; 

$post_id = $post->ID; 

// to prevent metadata or custom fields from disappearing... 
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
return $post_id; 

update_post_meta($post_id, "price", $_POST["price"]); 

}   

?>
3
Kaspars

Ihr Code macht keinen Sinn, trotzdem ist hier ein guter Weg, dies zu tun und Sie erhalten: enter image description here

function Print_price_fileds($cnt, $p = null) {
if ($p === null){
    $a = $b = $c = '';
}else{
    $a = $p['n'];
    $b = $p['d'];
    $c = $p['p'];
}
return  <<<HTML
<li>
    <label>Nr :</label>
    <input type="text" name="price_data[$cnt][n]" size="10" value="$a"/>

    <label>Description :</label>
    <input type="text" name="price_data[$cnt][d]" size="50" value="$b"/>

    <label>Price :</label>
    <input type="text" name="price_data[$cnt][p]" size="20" value="$c"/>
    <span class="remove">Remove</span>
</li>
HTML
;
}


//add custom field - price
add_action("add_meta_boxes", "object_init");

function object_init(){
  add_meta_box("price_meta_id", "Price fields :","price_meta", "post", "normal", "low");

}

function price_meta(){
 global $post;

  $data = get_post_meta($post->ID,"price_data",true);
  echo '<div>';
  echo '<ul id="price_items">';
  $c = 0;
    if (count($data) > 0){
        foreach((array)$data as $p ){
            if (isset($p['p']) || isset($p['d'])|| isset($p['n'])){
                echo Print_price_fileds($c,$p);
                $c = $c +1;
            }
        }

    }
    echo '</ul>';

    ?>
        <span id="here"></span>
        <span class="add"><?php echo __('Add Price Data'); ?></span>
        <script>
            var $ =jQuery.noConflict();
                $(document).ready(function() {
                var count = <?php echo $c - 1; ?>; // substract 1 from $c
                $(".add").click(function() {
                    count = count + 1;
                    //$('#price_items').append('<li><label>Nr :</label><input type="text" name="price_data[' + count + '][n]" size="10" value=""/><label>Description :</label><input type="text" name="price_data[' + count + '][d]" size="50" value=""/><label>Price :</label><input type="text" name="price_data[' + count + '][p]" size="20" value=""/><span class="remove">Remove</span></li>');
                   $('#price_items').append('<? echo implode('',explode("\n",Print_price_fileds('count'))); ?>'.replace(/count/g, count));
                    return false;
                });
                $(".remove").live('click', function() {
                    $(this).parent().remove();
                });
            });
        </script>
        <style>#price_items {list-style: none;}</style>
    <?php
    echo '</div>';
}


//Save product price
add_action('save_post', 'save_detailss');

function save_detailss($post_id){ 
global $post;


    // to prevent metadata or custom fields from disappearing... 
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
    return $post_id; 
    // OK, we're authenticated: we need to find and save the data
    if (isset($_POST['price_data'])){
        $data = $_POST['price_data'];
        update_post_meta($post_id,'price_data',$data);
    }else{
        delete_post_meta($post_id,'price_data');
    }
} 

Ich bekomme immer wieder Leute, die mich fragen, wie ich die Daten im Frontend zum Drucken bringe:

$data = get_post_meta($post->ID,"price_data",true);
echo '<ul>';
    if (count($data) > 0){
        foreach((array)$data as $p ){
            if (isset($p['p']) || isset($p['d'])|| isset($p['n'])){
                echo '<li>Number: '.$p['n'].' Description: '.$p['d'].' Price: '.$p['p'].'</li>';
            }
        }
    }
echo '</ul>';
12
Bainternet