Ondersteuning » Code oplossingen gezocht » 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.