it-swarm.com.de

Ändern Sie die Funktion der übergeordneten Themendatei in der Datei functions.php für untergeordnete Themen

ich versuche zu verstehen, wie Action Hooks und Filter funktionieren und habe dieses Beispiel, das ich bearbeiten möchte

Diese Funktion befindet sich in einer PHP-Datei eines übergeordneten Themen-Frameworks:

public function formatArticleCat01( $show_category = false, $shorten_text_chars = 300, $show_date = true, $show_comments = false, $show_author = false, $show_views = false ) {
$sFigure = ( $this->article_thumb != '' ) ? '<div class="col-sm-6 col-md-4 col-lg-5">'. $this->getReviewScore() .'' .$this->getFigureSmall() .'</div><div class="col-sm-6 col-md-8 col-lg-7">' : '<div class="col-xs-12">';
return '<div class="row clearfix">
            <!-- start:article.default -->
            <article class="def">
                '. $sFigure .'
                    <div class="entry">
                        '. ( $show_category ? $this->getCategoryLabelSpan() : '' ) .'
                        <h3 itemprop="name">
                            <a itemprop="url" href="'. get_permalink($this->article_link) .'">'. $this->article_title .'</a>
                        </h3>
                        <div class="entry-meta">
                            '. ( $show_date ? $this->getPostDateMeta() : '' ) .'
                            '. ( $show_author ? $this->getAuthorMeta() : '' ) .'
                            '. ( $show_comments ? $this->getCommentCountMeta() : '' ).'
                            '. ( $show_views  ? $this->getViewsLabelSpan() : '' ) .'
                        </div>
                        <div class="text hidden-xs">
                            '. MipThemeFramework_Util::ShortenText($this->article_content, $shorten_text_chars) .'
                        </div>
                        '. $this->getStarRatingLabelSpan() .'
                    </div>
                </div>
            </article>
            <!-- end:article.default -->
        </div>';
}

Nehmen wir also an, ich möchte diesem Div in dieser Zeile eine weitere Klasse hinzufügen

$sFigure = ( $this->article_thumb != '' ) ? '<div class="col-sm-6 col-md-4 col-lg-5">'. $this->getReviewScore() .'' .$this->getFigureSmall() .'</div><div class="col-sm-6 col-md-8 col-lg-7">' : '<div class="col-xs-12">';

Es sollte doch mit einem Filterhaken klappen oder? Kann mir jemand helfen, die Funktionsweise von Filter-Hooks zu verstehen und dieses Beispiel zum Laufen zu bringen?

Ich habe keine Ahnung, was ich in die Datei functions.php meines untergeordneten Themas einfügen soll, um den Verlust der Änderungen zu verhindern, wenn ich das Thema aktualisiere.

Hoffe mir kann jemand helfen

Vielen Dank

3
nameless

Filter dienen zum Ändern der Daten, aber Aktionen ähneln Bushaltestellen, an denen Sie Ihre Funktionen dem Thema zuordnen können. Sie werden ausgeführt, wenn das Skript einen bestimmten Status erreicht.

Um eines der oben genannten zu verwenden, müssen sie zuerst irgendwo deklariert werden. Schauen wir uns dieses Beispiel auf der Codex-Seite von apply_filters an:

// Function that modifies the data
function example_callback( $string, $arg1, $arg2 ) {
    // (maybe) modify $string
    return $string;
}
// The filter used by user
add_filter( 'example_filter', 'example_callback', 10, 3 );

// Declaration of the filter by the person who 
$value = apply_filters( 'example_filter', 'filter me', $arg1, $arg2 );

Wie Sie sehen, wird der Filter mit $data = apply_filters( ... ) deklariert und benannt. Dann wird es an einer anderen Stelle im Code mit add_filter( ... ) aufgerufen. Wenn Sie also keinen Filter deklariert haben, der an diese Daten angehängt ist, können Sie diese Daten nicht filtern.

Nun zu Ihrem Code. Anscheinend haben Sie diesen Code aus einer Klasse geholt. Die meisten anständigen Entwickler verwenden steckbare Funktionen, wenn sie ihren Code schreiben. Das heißt, sie definieren ihre Klassen und Funktionen wie folgt:

if ( ! class_exists( 'some_class' ) {
    class some_class {
        // Class code here
    }
}

Auf diese Weise kann der Benutzer diese bestimmte Klasse oder Funktion überschreiben, indem er sie einfach selbst definiert. Schauen Sie sich Ihren Code an. Wenn Sie die gleiche Vorgehensweise anwenden, können Sie die Klasse in die functions.php-Datei Ihres untergeordneten Themas kopieren und die gewünschten Teile ändern.

2
Jack Johansson

Unter dem Begriff "Laie" werden Filter verwendet, um vorhandene Daten wie den Inhalt eines Posts oder einen anderen definierten Wert zu ändern. Handlungen auf der Hand tun etwas, wenn eine bestimmte Sache ausgeführt wird.

Für beide Aktionen und Filter müssen Sie diese zuerst deklarieren, d. H. Im Fall von Filtern müssen Sie definieren, was mit einem Filter geändert werden kann, und für Aktions-Hooks, was die Ausführung der Aktion bewirkt.

Hinweis: In Ihrem obigen Beispiel wird keine filter erwähnt. Daher können Sie diese Funktion nur ändern, indem Sie sie in die function.php-Datei Ihres untergeordneten Themas kopieren und manuell eine Klasse hinzufügen.

Schauen wir uns ein Beispiel an, um zu verstehen, wie Filter funktionieren.

Nehmen wir an, Sie möchten den Namen eines Autors drucken, dann können Sie eine filter darauf anwenden, sodass Sie den Namen des Autors ändern können, ohne die ursprüngliche Funktion zu ändern.

/*
 * - 'change_author_name_filter' is the filter hook $tag
 * - 'Digvijayad' is the value being filtered
$author_name = apply_filter('change_author_name_filter', 'Digvijayad');

Wenn Sie jetzt $author_name verwenden, wird 'Digvijayad' als Standardautorname verwendet. Wenn Sie jedoch einen Filter wie den folgenden hinzufügen.

// filter call_back
function change_author_name( $author_name ){
    //here you can do whatever you want to author name;
    // you can modify it or replace it altogether.

    // To print 'Digvijayad & Jack Johansson' you can do the following.
    // $author_name .= ' & Jack Johansson';

    // or you can replace it altogether. 
    $author_name = 'Jack Johansson';

    return $author_name;
}
add_filter('change_author_name_filter', 'change_author_name', 10, 1);

Wenn Sie jetzt $author_name verwenden, wird dieser durch 'Jack Johansson' ersetzt.

Aktionen lösen eine Reaktion aus, wenn etwas getan wird. Nehmen wir Alarm als Analogie. Zuerst stellen Sie eine Uhrzeit für einen Alarm ein. Wenn die Uhrzeit erreicht ist, ertönt ein akustisches Signal, um Sie darauf hinzuweisen, dass es Zeit ist.

Jetzt können Sie mit Aktionen den Wecker anweisen, andere Aktionen auszuführen, z. B. "Freunde anrufen", wenn die Uhrzeit erreicht ist. Lassen Sie uns dies nun in den Code einfügen.

Nehmen wir an, Sie haben bereits die Uhrzeit eingestellt. Jetzt legen Sie einen do_action-Hook fest, der etwas bewirkt, wenn die Uhrzeit abgelaufen ist.

//code when time is checked
// and now time is up
do_action('time_is_up'); //basically it will perform this action when ever the time is up

jetzt können Sie diesem bestimmten Ereignis weitere Aktionen hinzufügen. In der Analogie können Sie jetzt festlegen, dass ein Freund angerufen werden soll, wenn die Aktion 'time_is_up' ausgeführt wird.

// Now Whenever 'time_is_up' runs this function will run as well
function call_friend(){
    //code for calling a friend;
    echo 'calling friend';
}
add_action('time_is_up', 'call_friend', 10);

Auf ähnliche Weise können Sie demselben Aktions-Hook 'time_is_up' weitere Aktionen hinzufügen. Zum Beispiel möchten Sie vielleicht auch Ihr Familienmitglied anrufen

function call_my_family(){
   //code to call my family
   echo 'calling family';
}
add_action('time_is_up', 'call_my_family', 10);

Hoffentlich beseitigt diese einfache Erklärung Ihre Verwirrung über Aktionen und Filter.

Weitere Informationen finden Sie in Tom McFralins Artikel zu Aktionen und Filtern.

0
Digvijayad