Support » Allgemeine Fragen » Funktion im Child verursacht redeclare-Fehler

  • Gelöst radarin

    (@radarin)


    Hallo zusammen

    Ich hab bei meinem Themes the_content gegen the_excerpt ersetzt, um Ruhe und Übersicht in die Layouts zu bekommen. Während beim einen Theme der Auszug lediglich innerhalb eines <p> ausgegeben wird, habe ich beim Theme Appointment unschöne <div> und <span>. Da ich die hässliche Darstellung mittels CSS nicht raus kriege, und ich auch das ganze Zeugs um den Auszug rum für unnötig halte, wollte ich die Funktion anpassen, die für die Ausgabe verantwortlich ist. In der functions.php des Parent bin ich fündig geworden.

    add_filter('get_the_excerpt','appointment_post_slider_excerpt');
    	    function appointment_post_slider_excerpt($output){
    		$output = strip_tags(preg_replace(" (\[.*?\])",'',$output));
    		$output = strip_shortcodes($output);		
    		$original_len = strlen($output);
    		$output = substr($output, 0, 155);		
    		$len=strlen($output);	 
    		if($original_len>155) {
    		$output = $output;
    		return  '<div class="slide-text-bg2">' .'<span>'.$output.'</span>'.'</div>'.
    	                       '<div class="slide-btn-area-sm"><a href="' . get_permalink() . '" class="slide-btn-sm">'
    						   .__("Read More","appointment").'</a></div>';
    		}
    		else
    		{ return '<div class="slide-text-bg2">' .'<span>'.$output.'</span>'.'</div>'; }   
            }

    Die Funktion habe ich nun in die functions.php meines Child kopiert. Nun erhalte ich den Fehler

    Fatal error: Cannot redeclare appointment_post_slider_excerpt()

    Ok, der selbe Funktionsname darf nicht mehrfach vorkommen. Mit der Funktion im Child sollte ich doch die Funktion überschreiben können? Mit anderen Funktionen wie das Anpassen der Länge oder des Weiterlesen Link gibt es keine Probleme.

    Worüber stolpere ich denn da?

    Ich verwende WP 4.9.6

    Gruss René

Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)
  • Die Funktion appointment_post_slider_excerpt() scheint einen Filter hinzuzufügen: add_filter('get_the_excerpt','appointment_post_slider_excerpt');.

    Den kannst du im Child-Theme wieder entfernen:

    add_action( 'after_setup_theme', 'remove_parent_filter' );
    function remove_parent_filter(){ 
      remove_filter( 'get_the_excerpt', 'appointment_post_slider_excerpt' );
    }

    Anschließend kannst du dann im Child Theme mit

    add_action( 'get_the_excerpt', 'child_theme_slider_excerpt' );
    function child_theme_slider_excerpt() { 
     // Funktion 
    };

    deinen eigenen Filter einfügen.

    Funktionen kannst du im Child Theme nur überschreiben, wenn sie im Parent Theme mit

    if ( ! function_exists( 'deine_funktion' ) ) {
      function deine_funktion() {
        // Funktion
      }
    }

    „pluggable“ (auswechselbar) gemacht wurden.

    Thread-Starter radarin

    (@radarin)

    Herzlichen Dank für Deine Antwort, funktioniert einwandfrei.

Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)
  • Das Thema „Funktion im Child verursacht redeclare-Fehler“ ist für neue Antworten geschlossen.