Support » Plugins » Shortcode in Shortcode Function aufrufen?

  • Gelöst timer7734

    (@timer7734)


    Hey,
    ich wollte gerade einen Shortcode schreiben, in dem ein Spoiler erschaffen wird und darin wird ein Galerie Shortcode aus einem anderem Plugin aufgerufen. Leider geht gar nichts mehr, sobald ich die folgende Zeile hinzufüge, um den Shortcode zu laden:
    echo do_shortcode('[tg_grid_gallery galery_id="4749"]')
    Hierbei wird das 4749 noch durch eine Variable ersetzt, jedoch will ich das erstmal zum laufen bekommen ^^
    Warum geht dann nichts mehr? Braucht ihr noch mehr Code oder reicht die eine Zeile (an der es 100% liegt)?

    MfG
    Timer7734

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 17)
  • Ein Shortcode verweist auf eine Callback-Funktion, die im Frontend ausgeführt werden soll, um den Shortcode zu ersetzen:

    function shortcode_callback_func( $atts, $content = '' ) {
    	$atts = shortcode_atts( array(
    		'id' => 'value',
    	), $atts, 'shortcode-id' );
    
    	// do shortcode actions here
    }
    add_shortcode( 'shortcode-id', 'shortcode_callback_func' );

    Ich weiß nicht, wie die Callback-Funktion deines Plugins heißt, aber statt echo do_shortcode('[tg_grid_gallery galery_id="4749"]') kannst du auch einfach die Callback-Funktion direkt aufrufen:

    $var = 4749
    echo tg_grid_gallery( 'id' = $var );

    Such mal in deinem Plugin nach add_shortcode(), dann findest du die Callback-Funktion.

    Thread-Starter timer7734

    (@timer7734)

    Ich habe das nun ungefähr so übernommen, nur habe ich folgendes Problem:
    Es kommt immer der Fehler „HTTP ERROR 500“. Deswegen habe ich mal schnell die echo Zeile deaktiviert (//), jedoch ging es dann trotzdem nicht wieder. Ich musste die Variable auch deaktivieren. Woran liegt das?
    Die Shortcode Funktion (wenn ich $galerid=… und echo deaktiviere gehts):

    function galery_spoiler($atts) {
    	extract( shortcode_atts( array(
    		'title' => '',
    		'galery_name' => '',
    	), $atts ) );
    	$galerid=$a['title']
    	echo tg_grid_gallery_func('gallery_id'=$galerid)
    }
    
    add_shortcode('galspoiler', 'galery_spoiler')

    Die CallBack-Funktion des Shortcode darf nie etwas ausgeben (echo), sondern immer nur zurückgeben (return). Leider ist der Fehlercode 500 wenig aussagekräftig. Mehr verrät der Error-Log des Webservers. Aber vermutlich reicht es schon, wenn du echo mit return ersetzt.

    Soll das Shortcode-Attribut title eigentlich einen Zahlenwert wiedergeben? Dann würde ich das in der Funktion noch validieren.

    Thread-Starter timer7734

    (@timer7734)

    Leider hat das das Problem nicht gelöst.
    Oh fail. Danke für den Hinweis. Title soll keinen Zahlenwert wiedergeben. Hab ich direkt geändert.
    Und sorry, wenn ich so dumm frage: Wie kann man den Error Log auslesen?
    Anscheinend habe ich in dem Jahr Pause doch mehr verlernt, als ich dachte, darum sorry, wenn ich manchmal etwas dumm frage ^^

    Die Syntax scheint auch noch nicht zu stimmen, da fehlen drei Semikolon am Ende der Zeile mit der Variablen $galerid …, am Ende der return-Zeile und am Ende von add_shortcode(). Hinter function() { … } kommt kein Semikolon.

    Wenn du sowas probierst, solltest du immer kurz den Debug-Modus aktivieren (Zeile define('WP_DEBUG', true); in der wp-config.php, wenn alles läuft wieder auf define('WP_DEBUG', false); setzen.

    Ob/wo du den Error-Log des Webservers auslesen kannst, ist bei jedem Webhoster verschieden. Schau mal im Kundenmenü nach, schau in die Online-Dokumentation des Webhoster und wenn das nicht hilft, frag beim Support nach.

    Probier mal das hier, wobei ich nicht weiß, welche Attribute die Funktion tg_grid_gallery_func() hat und ob $gallery_id korrekt ist:

    
    function galery_spoiler( $atts ) {
    	extract(
    		shortcode_atts(
    			array(
    				'title'       => '',
    				'galery_name' => '',
    			), $atts
    		)
    	);
    	$galerid = $a['title'];
    	return tg_grid_gallery_func( $gallery_id = $galerid );
    }
    
    add_shortcode( 'galspoiler', 'galery_spoiler' );
    Thread-Starter timer7734

    (@timer7734)

    Ok nun kommt folgender Fehler:

    Parse error: syntax error, unexpected ‚=‘ in /mnt/web115/b2/13/57821813/htdocs/main/wp-content/plugins/galery-spoiler/galery-spoiler.php on line 20

    Jedoch habe ich gerade keine Ahnung, wo da der Fehler ist. Ich habe die Stelle mit dem = doch genauso gemacht, wie oben geschrieben oder nicht?
    Und danke. Habe gerade die Semikolon komplett vergessen. Muss mich gerade erstmal wieder einarbeiten ^^

    Welchen Code hast du denn inzwischen? 🙂

    Thread-Starter timer7734

    (@timer7734)

    Oh ich habe deinen zuvorigen zweiten Post nicht gesehen. Habe das nun eingefügt und nun war der Fehler weg. Nur leider kommt ein von der Function „tg_grid_gallery_func“ vorgefertigter Fehler:

    Empty gallery item. Please make sure you have upload image to it or check the short code.

    Und nebenbei hier der aktuelle Code (habe noch ein paar Fehler gefunden, die ich abgeändert hab):

    function galery_spoiler( $atts ) {
    	$a = shortcode_atts( array(
    		'title'       => '',
    		'galery_name' => '',
    	), $atts );
    	return tg_grid_gallery_func($gallery_id = $a['galery_name'], $margin = "false");
    }
    
    add_shortcode( 'galspoiler', 'galery_spoiler' );

    Enthält denn dein Shortcode auch das Attribut?
    [galspoiler galery_name="irgendwas"]

    Übrigens: auf Deutsch heißt es Galerie, auf English gallery mit zwei „l“. 🙂

    Thread-Starter timer7734

    (@timer7734)

    Ja
    [galspoiler title="test" galery_name="4749"]

    Was ist das denn für ein Plugin, das du da verwendest?
    Ich würde mir die Funktion gerne mal anschauen.

    Thread-Starter timer7734

    (@timer7734)

    Das hat glaube ich früher mal mein Bruder geschrieben (der steht gerade zur Hilfe leider nicht zur Verfügung). Da ich jetzt leider nicht weiß, ob ich das veröffentlichen darf, schreibe ich hier mal nur den einzelnen Shortcode (ich hoffe das reicht):

    function tg_grid_gallery_func($atts, $content) {
    	extract(shortcode_atts(array(
    		'gallery_id' => '',
    		'margin' => 'false',
    	), $atts));
    
    	$images_arr = get_post_meta($gallery_id, 'wpsimplegallery_gallery', true);
    	$images_arr = pp_resort_gallery_img($images_arr);
    	
    	$return_html = '';
    	$custom_id = time().rand();
    	
    	$margin_class = '';
    	if(!empty($margin) && $margin == 'true')
    	{
    		$margin_class = 'withmargin';
    	}
    
    	if(!empty($images_arr))
    	{
    		$return_html.= '<div id="'.$custom_id.'" class="photo_wall_wrapper shortcode ' .esc_attr($margin_class).'">';
    		
    		foreach($images_arr as $key => $image)
    		{
    			$image_url = wp_get_attachment_image_src($image, 'original', true);
    			$small_image_url = wp_get_attachment_image_src($image, 'tg_grid', true);
    			
    			$image_caption = get_post_field('post_excerpt', $image);
    			
    			$tg_lightbox_enable_caption = kirki_get_option('tg_lightbox_enable_caption');
    			
    			$return_html.= '<div class="wall_entry ' .esc_attr($margin_class).'">';
    			$return_html.= '<div class="wall_thumbnail">';
    			$return_html.= '<a class="fancy-gallery" href="'.esc_url($image_url[0]).'" ';
    			
    			if(!empty($tg_lightbox_enable_caption)) 
    			{
    				$return_html.= 'title="'.esc_attr($image_caption).'" ';
    			}
    			
    			$return_html.= '>';
    			$return_html.= '<img src="'.esc_url($small_image_url[0]).'" alt=""/>';
    			
    			$return_html.= '</a>';
    			$return_html.= '</div>';
    			$return_html.= '</div>';
    		}
    		
    		$return_html.= '</div>';
    	}
    	else
    	{
    		$return_html.= __( 'Empty gallery item. Please make sure you have upload image to it or check the short code.', PLUGINDOMAIN );
    	}
    
    	return $return_html;
    }
    add_shortcode('tg_grid_gallery', 'tg_grid_gallery_func');

    Nur so nebenbei: wenn ich [tg_grid_gallery gallery_id="4749"] schreibe, wird die Galerie ohne Fehler angezeigt.

    Probier mal folgendes:

    function gallery_spoiler( $atts ) {
      $a = shortcode_atts( array(
        'gallery_id' => '',
        'margin'      => false,
        ), $atts );
      $args = array(
        'gallery_id' => $a[ 'gallery_id' ],
        'margin'     => $a[ 'margin' ],
      );
      return tg_grid_gallery_func($args);
    }
    
    add_shortcode( 'galspoiler', 'gallery_spoiler' );

    Der Shortcode lautet dann [galspoiler gallery_id="4749"].

    Thread-Starter timer7734

    (@timer7734)

    Da kommt dann ein Warning:

    Warning: Missing argument 2 for tg_grid_gallery_func(), called in /mnt/web115/b2/13/57821813/htdocs/main/wp-content/plugins/galery-spoiler/galery-spoiler.php on line 24 and defined in /mnt/web115/b2/13/57821813/htdocs/main/wp-content/plugins/custom-post/tg-shortcode.php on line 717

    Kann ich das einfach ignorieren/irgendwie abschalten oder wie bekomme ich das weg?

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 17)
  • Das Thema „Shortcode in Shortcode Function aufrufen?“ ist für neue Antworten geschlossen.