web-dev-qa-db-ja.com

'post_type_link'フィルタが機能しない

私はそれがうまくいくはずだと知っています、これが最近のバグなのか何かなのか知りません。それで、それを確認するために、私はデフォルトテーマを使って新鮮なワードプレスをインストールしました。私は蛇腹のような小さなプラグインを作りました:

<?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));
}

しかし、どういうわけかそれはまだ示しています:

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

私が何かが間違っているかどうか私に知らせてください。

編集

私の懸念は、上記のコードがこれを出力するべきであるということです(あるいは、私が何かが間違っているかどうか私に知らせてください)

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

私が「出力」と言ったとき、私はpostID#1のためのパーマリンクがそのようであるべきであることを意味します。

編集2

いいえ、これはカスタム投稿タイプではありません。これにはデフォルトの "post"を使用しています。

3
Rizwan

それはバグではありません。 @LuisSanzが指摘したように、 post_type_link は組み込みのpost投稿型には使用されません。カスタム投稿タイプにのみ使用されます。

get_permalink() functionを読み飛ばすと、WordPressはpost_type_linkフィルターを使用せずに post_link filterを使用することがわかります。それはあなたが間違ったフィルタを使っているということです。

その後、post_type_linkpost_linkに変更すると問題が解決します。

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