web-dev-qa-db-fra.com

Le filtre 'post_type_link' ne fonctionne pas

Je sais que cela devrait fonctionner correctement, je ne sais pas s'il s'agit d'un bogue récent ou quelque chose du genre. Donc, pour le confirmer, j'ai installé un nouveau wordpress utilisant le thème par défaut. J'ai fait un petit plugin comme ci-dessous:

<?php
/*
Plugin Name: Test
Plugin URI: http://www.something.com
Description: To test
Version: 1.0
Author: Yet another dev
Author URI: http://me.com
*/

add_filter('post_type_link', 'wpse33551_post_type_link', 1, 2);

function wpse33551_post_type_link( $link, $post = 0 ){
    return home_url( 'temp-tests/' . $post->ID );
}

add_action('init', 'sfsafsdsf_test');

function sfsafsdsf_test(){
    wp_die(get_permalink(1));
}

Mais pour une raison quelconque, il est toujours affiché:

_ {http://example.com/2016/06/22/hello-world/

Faites-moi savoir si je me trompe à quelque chose.

Modifier

Mon souci est que le code ci-dessus devrait sortir ceci (ou laissez-moi savoir si je me trompe à quelque chose):

http://example.com/temp-tests/1

Quand je dis "sortie", je veux dire que le permalien pour postID # 1 devrait être comme ça.

Éditer 2

Non, ce n'est pas un type de message personnalisé. J'utilise par défaut "post" pour cela.

3
Rizwan

Ce n'est pas un bug. Comme @LuisSanz l'a souligné, post_type_link n'est pas utilisé pour le type d'article post intégré. Il est utilisé uniquement pour les types de publication personnalisés.

Parcourez get_permalink() function, vous découvrirez que WordPress n'utilise pas le filtre post_type_link mais utilise post_link filter. Cela signifie que vous utilisez un mauvais filtre.

Ensuite, remplacez post_type_link par post_link devrait résoudre le problème:

add_filter('post_link', 'wpse230567_filter_post_link', 1, 2);

function wpse230567_filter_post_link($link, $post = 0)
{
    return home_url('temp-tests/' . $post->ID);
}
8
MinhTri