Get Adobe Flash player

Wordpress - Beitragsbild auswahl auf bestimmte Größe beschränken

Heute möchte ich euch eine möglichkeit zeigen, wie ihr Benutzer in der auswahl des Media Manager das Beitragsbild einschränken könnt.

Ziel: Benutzer bekommen bei aufruf nur die vorher festgelegte Größe zu sehen. Bei Upload sollen die falschen nicht auswählbar sein.

Zuerst kümmer wir uns darum die Auswahl bei aufruf des Media Managers zu beschränken sobal ein Beitragsbild festgelegt werden soll.

Dazu müssen wir vorher wissen ob der Nutzer auch die entsprechende Auswahl getroffen hat. Dies tun wir mittels nen Stück javascript in der wir die dazugehörige Funktion von Wordpress überschreiben:

 

add_action( 'admin_print_footer_scripts', 'override_FeaturedImage_object',51);
	
				function override_FeaturedImage_object() { ?>

 }


Nun können wir den Parameter thb in einem Worpress Filter abfragen und entsprechend reagieren. Zusätzlich setzen wir einen Parameter "i_thumb" für das Spätere JS Template für die Anzeige im Media Manager.

 

Dies tun wir nun mit dem "post_where" Filter von Wordpress

 

add_filter( 'posts_where' , function($where){
					global $wpdb;
					if (stristr($where,"post_type = 'attachment'") !== false && (isset($_REQUEST['query']['thb']) && $_REQUEST['query']['thb'] == 1) ) {
// Bedingung zur beschränkung auf eine bestimmte größe hinzufügen $where .= " AND ".$wpdb->posts.".ID = (SELECT post_id FROM `".$wpdb->postmeta."` WHERE meta_value LIKE '".'a:5:{s:5:"width";i:535;s:6:"height";i:300;%'."' AND post_id = ".$wpdb->posts.".`ID`)"; } return $where; } );

 

Hier prüfen wir ob ein attachment abgfragt wird und ob unser Parameter mitgesendet wurde. Falls beides zutrifft hängen wir eine Bedingung an die nur auf unsere gewünschte größe trifft.

 

Damit nun auch beim Upload die Bilder gesperrt werden müssen wir noch eine funktion anpassen die dem JS die Thumbnails übergibt:

add_filter('wp_prepare_attachment_for_js',function($a,$b,$c){
		
					if ($a['height'] == 500 && $a['width'] == 600) {
						$a['compat']['thumb'] = 1;
					}
					
					return $a;
				}, 10 , 3);

Wir prüfen ob die größe übereinstimmt über übergeben dann eine zusätzliche Eigenschaft die wir dann im JS prüfen können, was wir nun hier tun:

add_action('admin_head',function() { 
				
					/*
					 * Nur im Postedit oder Post New screen des Posttypes post
					*/
					if ( is_admin() ) {
						/*
						 * Einfügen der zusätzlichen js datei
						*/
						global $pagenow, $typenow;
						if (empty($typenow) && !empty($_GET['post'])) {
							$post = get_post($_GET['post']);
							$typenow = $post->post_type;
						}
						if ($pagenow=='post-new.php' OR $pagenow=='post.php' && $typenow=='post') {
					
					?>

<?php } } }, 1); }

Wir prüfen hier auf unseren parameter "i_thumb" um festzustellen ob wir im richtigen Screen sind falls ja prüfen wir ob "data.compat.thumb" eine 1 enthält, ist dies der falls müssen wir nichts weiter tun. Ist dies aber nicht der falls geben wir eine geänderte Fassung des Thumbnail codes aus um zu verhindern das das Bild markiert werden kann und wählen per jQuery trigger funktion das eben hochgeladenen Bild wieder ab da Wordpress das zuletzt geladene immer auswählt.

Das wars schon... wünsche viel pass bei nachbauen ;)

 

mfg