it-swarm.com.de

So filtern Sie die Ausgabe der Funktion get_permalink ()

Ich weiß, wie man die Ausgabe der Funktion the_permalink filtert - es ist so:

add_filter('the_permalink', 'my_the_permalink');
function my_the_permalink($url) {
    return 'http://mysite/my-link/';
}

Und es funktioniert, wenn ich es wie folgt benutze: <?PHP the_permalink($id); ?>, aber ich wollte den von der Funktion get_permalink($id) zurückgegebenen Link ändern. Und dieser Filter wirkt sich in diesem Fall nicht auf den zurückgegebenen Permalink aus.

Ich habe versucht, es zu fangen mit:

add_filter('post_link', 'my_get_permalink', 10, 3);
function my_get_permalink($url, $post, $leavename=false) {
    return 'http://mysite/my-link/';
}

Dieser Filter wird jedoch nicht für die get_permalink() ausgelöst. Wie kann ich die von der Funktion get_permalink() zurückgegebenen Links ändern?

2
Picard

Beachten Sie, dass der post_link-Filter nur für den Beitragstyp post gilt.

Für andere Beitragstypen stehen folgende Filter zur Verfügung:

Die Funktion get_permalink() ist eigentlich ein Wrapper für:

  • get_post_permalink()
  • get_attachement_link()
  • get_page_link()

in diesen Fällen.

Hier ist eine Möglichkeit (ungetestet), einen benutzerdefinierten wpse_link-Filter für alle oben genannten Fälle von get_permalink() zu erstellen:

foreach( [ 'post', 'page', 'attachment', 'post_type' ] as $type )
{
    add_filter( $type . '_link', function ( $url, $post_id, $sample ) use ( $type )
    {
        return apply_filters( 'wpse_link', $url, $post_id, $sample, $type );
    }, 9999, 3 );
}

hier können wir nun alle Fälle filtern mit:

add_filter( 'wpse_link', function(  $url, $post_id, $sample, $type )
{
    return $url;
}, 10, 4 );
3
birgire