2009-07-29 6 views
1

Ich bin ziemlich neu (das Verständnis der WP Guts), und ich wollte die Hooks und Filter besser verstehen, ich kann es nicht richtig aus Codex.WordPress: Aktionen, Filter & Hooks

ich einen einfachen Test,

die Idee ist, außer Kraft zu setzen

den get_title() -Methode, um den „Protected“ zu löschen tat Satz aus dem Titel, wenn die Seite geschützt ist, ist es ein protected_title_format Filter und ich dachte, mit ihm ...

dieser Linie in post-template.php gibt:

$protected_title_format = apply_filters('protected_title_format', __('Protected: %s')); 

für das, was ich von CODEX bekommen konnte, ich brauche diese Filter zu entfernen und meine eigenen schreiben,

remove_action('protected_title_format'); 
apply_filters('protected_title_format', __('MY OWN PAGE Protected: %s')); 

verwenden, weg vom Kurs so etwas wie

// Removing action 
function remove_title_action() { 
    remove_action('protected_title_format','get_the_title',3); 
} 
add_action('init','remove_title_action'); 

// Adding custom function 
add_action('protected_title_format','fancy_title', 3, 4); 

function fancy_title($id = 0) { 
    $post = &get_post($id); 
    $title = $post->post_title; 

    echo "I'm the king of the world!... >" . $title . "< & >" . $post . "<"; 

    if (!is_admin()) { 
    if (!empty($post->post_password)) { 
     $protected_title_format = apply_filters('protected_title_format', __('MY OWN PAGE Protected: %s')); 
     $title = sprintf($protected_title_format, $title); 
    } 
    } 
    return apply_filters('the_title', $title, $post->ID); 
} 

ich das Echo Ausgang zu bekommen, aber ich nicht den $ id bekommen (und dafür kein $ title oder $ post), ist diese Methode ist eine Kopie von get_title(), die alles außer der geschützten Teilzeichenfolge entfernt.

Kann mir jemand erklären wie das funktioniert? Danke


P. S. Ich möchte lernen, das ist die Idee dieser Frage, nicht jemand mir zu sagen "Hey, gehen Sie einfach zu post-template.php und ändern Sie es", denn dann würde ich fragen "Wie wäre es, wenn ich WP aktualisieren ... " !

+0

+1 für den Versuch, das Richtige zu tun. –

Antwort

3

Sie können dies viel einfacher als das, was Sie versuchen. Sie sind jedoch auf dem richtigen Weg.

Im Grunde, was Sie tun möchten, ist eine eigene Funktion, die den "Protected:" Teil der WordPress-Titel strippen wird. Am einfachsten erstellen Sie dazu einfach eine Funktion, die preg_replace() verwendet, um nach dem Text "Protected:" zu suchen und ihn zu entfernen. Sie könnten genauso einfach die Zeichenfolge durch Ihren eigenen Text ersetzen lassen.

Hier ist eine Beispielfunktion, die das tut. Wir nehmen den $ -Titel als Parameter und geben die modifizierte Version davon zurück.

function remove_protected_text($title) { 
    $match = '/Protected: /'; 
    $replacement = ''; 

    $title = preg_replace($match, $replacement, $title); 
    return $title; 
} 

Das nächste, was wir wirklich tun möchte, ist unsere Funktion zu einem Filter Haken hinzuzufügen. Der Filter Hook, an dem wir uns in diesen Fällen interessieren, ist 'the_title'. So fügen wir die folgende Zeile unterhalb der Funktion, die wir gerade geschrieben hat:

add_filter('the_title', 'remove_protected_text', 10); 

Diese unsere Funktion fügt remove_protected_text() die ‚the_title‘ Filter. In diesem Fall habe ich das dritte Argument verwendet, um unserem Filter eine Priorität von 10 zu geben. Dies ist völlig optional, aber ich denke, dass dieser Filter eine ziemlich niedrige Priorität hat.

Also alles zusammen sollte unser Code wie folgt aussehen:

function remove_protected_text($title) { 
    $match = '/Protected: /'; 
    $replacement = ''; 

    $title = preg_replace($match, $replacement, $title); 
    return $title; 
} 
add_filter('the_title', 'remove_protected_text', 10); 

diesen Code in die functions.php-Datei in Ihrem Thema es erlaubt Hinzufügen zu arbeiten. Sie können für die meisten Teile von WordPress, die Text ausgeben, solche Filter schreiben.

aktualisieren

Hier ist eine überarbeitete Version der Funktion, die die übersetzte Zeichenfolge von „Protected:“ erhalten soll, und entfernen Sie sie:

function remove_protected_text($title) { 
    $protected = __('Protected: %s'); 
    $protected = preg_replace('/ %s/', '', $protected); 

    $match = "/${protected}/"; 
    $replacement = ''; 

    $title = preg_replace($match, $replacement, $title); 

    return $title; 
} 
add_filter('the_title', 'remove_protected_text'); 

Grundsätzlich ist die einzige Veränderung ist hier, dass wir verwenden die Funktion __(), um die geschützte Zeichenfolge zu übersetzen und dann die zusätzlichen Bits zu entfernen. Das ist irgendwie hackisch, und ich bin mir sicher, dass es einen besseren Weg gibt, es zu tun, aber es funktioniert in meinen Tests.

Ich habe das auf einer spanischen Version von WordPress getestet und es hat funktioniert, lassen Sie mich wissen, ob es für Ihr Projekt funktioniert.

+0

thxs, ich werde es versuchen – balexandre

+0

Hallo, hatten Sie Glück mit meiner Lösung? – NerdStarGamer

+0

nicht wirklich ... es funktioniert auf der englischen WP, nicht in einer anderen Sprache :) wir sollten den Wert vor der Übersetzung erhalten. – balexandre