私はパーマリンク構造 "/%category%/%postname%/"を使っています。
気になるのは、2つのカテゴリに属する投稿があることです。そしてもちろん、残念なことに、Wordpressはスラッグ生成にいつも間違ったものを選びます。
ポストスラッグのためにどのカテゴリーが選択されるかを制御するための素晴らしい、そしてきれいな方法はありますか?
どうもありがとう!
WordPressは最も低いIDをメインパーマリンクとして選びます。ただし、 ALL カテゴリには投稿が自動的に含まれます。これら両方を意味する:
...あなたの投稿をリダイレクト経由で返します(投稿AはカテゴリAとカテゴリBの両方にあります)。申し訳ありませんが、編集ページにそれらすべてを一覧表示することはできません。しかし、それは彼らがすべてのカテゴリで利用可能であることを確認します。
もちろん、 get_permalink
は間違ったものを返します。
http://codex.wordpress.org/Using_Permalinks#Using_.25category.25_with_multiple_categories_on_a_post
振る舞いを上書きするために、今見てください:
http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/link-template.php#L71 、具体的には121行目の少し下です。IDでソートした後に$cats[0]->slug
を使用します。これは内部ではフック可能であるようには見えません。
これは、動作方法を変更しようとしていたチケットです http://core.trac.wordpress.org/ticket/18752 /のマークが付いていますただし、Future Release。あなたの興味を示すためにチケットを購読してください、多分それは今年後半にWordPress 3.5にそれを作ります。
pre_post_link
フィルタを使用すると、パーマリンクを上書きできます。 post_link
も。
あるいは、 get_the_category
を使用すると、投稿のIDをハッキングできます(または他のユーザーを削除して1つだけにすることができます)が、 のみ パーマリンクが要求されたときに発生します。
add_filter( 'pre_post_link', function( $permalink, $post ) {
if ( strpos($permalink, '%category%') === false )
return; /* not interested */
add_filter( 'get_the_categories', 'wpse46860_Prune_categories' );
return $permalink;
}, null, 2 );
function wpse46860_Prune_categories( $categories ) {
/* run once */
remove_filter( 'get_the_categories', 'wpse46860_Prune_categories' );
/* .. Prune the categories to leave the one you need .. */
global $_Hijack_post_id;
return $categories;
}
これはハックです。
追加の難しさは、post_IDを取得してカテゴリを整理することです。get_the_categories
フィルタはpost_IDを渡しません。グローバル(ダーティ)またはクラスプロパティ(クリーン)を使用してください。
次のようなさまざまなパーマリンクプラグインを試すことができます。
あなたはいつでもプラグインを使うことができます。 ひかりカテゴリパーマリンク は、あなたが探しているものを正確に実行します...面倒なことなしに。
どのカテゴリをデフォルトのパーマリンクとして保存したら、 "pre_post_link"フィルタを使ってget_permalink関数にフックできます。
これも役に立つかもしれません、見てみましょう.. http://shibashake.com/wordpress-theme/wordpress-permalink-add