Meta informatie vanuit array opvragen
-
Goede avond allemaal,
Ik ben bezig met het ontwikkelen van een WordPress Plugin. Het gaat om een slider plugin.
Nu staat het grootste deel al, maar heb nog over een bepaald stuk een vraag.
Onderstaande code (core.php) staan alle functies opgesomd. Nu werk ik ook met een stukje javascript (custom.js) om de velden te kunnen dupliceren.
Hiervoor geef ik aan de “name” attributen een getal mee. Wanneer ik op add new row klik, wordt de input veld gedupliceerd. Nu kan ik 2 verschillende captions toevoegen. Wanneer ik op “update” in de backend klik, wordt beide meta data gesaved.Wat ik nu wil is dat ik beide waardes kan tonen, maar wel dat de caption aansluit bij de image die geupload wordt (hier heb ik ook nog problemen mee, ik kan namelijk maar 1 afbeelding uploaden, de velden worden wel gedupliceerd, maar krijgt overal dezelfde waarde, misschien heeft iemand hiervoor ook een oplossing?).
Mijn code voor de slider ziet er als volgt uit, deze code is om de images in de slider te plaatsen..
function dsslider_get_slider_markup() { $html = '<div class="flexslider">'; $html .= '<ul class="slides">'; // Get images and set it inside an <li> -tag $args = array('post_type' => 'brandbox-slider'); $loop = new WP_Query($args); if($loop->have_posts()) : while($loop->have_posts()) : $loop->the_post(); $images = get_post_meta(get_the_ID(), 'dsmeta_image', true); $image = wp_get_attachment_image_src($images[0], 'full'); // Only add [0] to variable $images $image = $image[0]; $alt = $image['title' ]; $html .= '<li>' . '<img src="' . $image . '" alt="' . $alt . '" />' . '</li>'; endwhile; else: echo '<img src="' . DSSLIDER_PATH . 'assets/images/default.jpg" alt="" />'; endif; $html .= '</ul>'; // End ul.slides unordered list $html .= '</div>'; // End div.flexslider return $html; // Return all of the generated HTML as a variable, like $html }
Core.php
// Begin a table row echo '<tr class="row">'; echo '<td class="order">' .$i++. '</td>'; foreach ($custom_meta_fields as $field) { // Get value of this field if it exists for this post $meta = get_post_meta($post->ID, $field['id'], true); $type = $field['type']; if ( ! ( $field || is_array( $field ) ) ) return; // Get field data $repeatable_fields = isset( $field['repeatable_fields'] ) ? $field['repeatable_fields'] : null; // The id and name for each field $id = $name = isset( $field['id'] ) ? $field['id'] : null; $repeatable = null; if ( $repeatable ) { $name = $repeatable[0] . '[' . $repeatable[1] . '][' . $id .']'; $id = $repeatable[0] . '_' . $repeatable[1] . '_' . $id; } // End if // Check if value repeatable is set if ($field['repeatable'] == true) { // Begin table data echo '<td>'; $i = 0; // Variable for repeater // Create an empty array if ( $meta == '' || $meta == array() ) { $keys = wp_list_pluck( $custom_meta_fields, 'id' ); $meta = array ( array_fill_keys( $keys, null ) ); } // End if // Return all the values of an array $meta = array_values( $meta ); // Begin each row foreach ($meta as $row) { // Markup for inside $row switch ($type) { // Image case 'image': echo 'Hello' . '<br>'; $image = get_template_directory_uri().'/images/image.png'; echo '<span class="default_image" style="display:none">' . $image . '</span>'; if ($meta) { $image = wp_get_attachment_image_src($row, 'thumbnail'); $image = $image[0]; } // End if statement echo '<input name="' . $field['id'] . '['.$i.']' . '" type="hidden" class="upload_image" value="' . $row . '" />'; echo '<img src="' . $image . '" class="preview_image" alt="" />'; echo '<input type="button" class="button add-image" value="Add Image">'; echo '<small><a href="#" class="remove-image">Remove Image</a></small>'; break; // Text case 'text': echo 'Hello' . '<br>'; echo '<input type="text" name="' . $field['id'] . '['.$i.']' . '" id="' . $field['id'] . '" value="' . $row . '" class="regular-text" size="30" />'; break; } // End switch statement $i++; //New number added to the name array } // End foreach loop - row echo '</td>'; } // End if statement } // End foreach loop echo '<td class="remove"><a class="repeatable-remove button" href="#">-</a></td>'; echo '</tr>'; // End .row
JS:
jQuery(function(jQuery) { // Add media to post jQuery('.add-image').click(function() { formfield = jQuery(this).siblings('.upload_image'); preview = jQuery(this).siblings('.preview_image'); tb_show('', 'media-upload.php?type=image&TB_iframe=true'); window.send_to_editor = function(html) { imgurl = jQuery('img',html).attr('src'); classes = jQuery('img', html).attr('class'); id = classes.replace(/(.*?)wp-image-/, ''); formfield.val(id); preview.attr('src', imgurl); tb_remove(); } return false; }); // Delete uploaded image jQuery('.remove-image').click(function() { var defaultImage = jQuery(this).parent().siblings('.default_image').text(); jQuery(this).parent().siblings('.upload_image').val(''); jQuery(this).parent().siblings('.preview_image').attr('src', defaultImage); return false; }); // Add repeatable row jQuery('.repeatable-add').click(function() { alert('Hello there!'); // Clone row field = jQuery('.ui-sortable').closest('.ui-sortable').find('.row:last').clone(true); fieldLocation = jQuery('.ui-sortable').closest('.ui-sortable').find('.row:last'); jQuery('input, input.upload_image, img.preview_image', field).val('').attr('name', function(index, name) { return name.replace(/(\d+)/, function(fullMatch, n) { return Number(n) + 1; }); }) field.insertAfter(fieldLocation, jQuery(this).closest('.ui-sortable')) return false; }); // Remove repeatable row jQuery('.repeatable-remove').click(function(){ jQuery('.ui-sortable').closest('.ui-sortable').find('.row:last').remove(); return false; }); // Drag and drop row jQuery('.row').sortable({ opacity: 0.6, revert: true, cursor: 'move', handle: '.sort' }); });
Ik hoor graag van jullie.
Met vriendelijke groet,
Casper
- Het onderwerp ‘Meta informatie vanuit array opvragen’ is gesloten voor nieuwe reacties.