Mignon Styleさんのコードは捨てて、以下のコードをどこかに入れればカテゴリーという機能そのものが投稿から無効化されます。
表面的な部分で対処しようとしないで元から断つのがコツです。
add_action( 'init', function(){
unregister_taxonomy_for_object_type( 'category', 'post' );
} );
Home
※ 追記
上のコードはクロージャを使ってるのでPHP5.3以降じゃないと動作しません。
> Takayuki Miyauchiさん
ありがとうございますー!
Miyauchiさんのコードで管理画面のメニューは非表示に出来ましたが、URLを入力するとページが表示されてしまいます。
これはデフォルトカテゴリーの値がデータベースに残ってるから消せないものなのでしょうか?
query_varsからも消さないといけないっぽいですね。
そのうえでrewriteをflushすればいいんじゃないかと。
もしそれでもだめならrewriteからもcategoryを消してflushかな。
ありがとうございます。
とりあえずわかるところまで試してみました。
デフォルトカテゴリーのカテゴリー名は「未分類」から「news」に変更済み
(カテゴリー名はvar_dump($wp_query->query_vars);
で調べてみました。)
1. 管理画面の「カテゴリー」を非表示にする
function my_unregister_taxonomy() {
unregister_taxonomy_for_object_type( 'category', 'post' );
}
add_action( 'init', 'my_unregister_taxonomy' );
2. query_varsからカテゴリー名を削除する
function delete_query_vars_filter( $vars ) {
$cat_slug = 'news';
unset( $vars[$cat_slug] );
return $vars;
}
add_filter( 'query_vars', 'delete_query_vars_filter' );
管理画面のパーマリンク設定の「変更を保存」して、
URL入力しても得に変更なかったです。(デフォルトカテゴリーのページが表示される)
リライトルールはさわったことないのですが、
この場合はflush_rewrite_rules()でcategoryを削除する感じでしょうか。
http://codex.wordpress.org/Function_Reference/flush_rewrite_rules
リライトルールの書き方がよくわからないので、
もうちょっと調べて、試してみてからまたご報告しますー
こんにちは、
で404に飛ばすことは出来るのですが、
テンプレートにthe_title()とかが入ってるとやっぱり表示されてしまいます。
テーマの構成なんですが、発生している現象から見ると、カテゴリー表示を停止するため
テーマには、category.php等が使われておらず、index.php等のフォールバックテンプレートが、カテゴリアーカイブで、使われているのかなぁ と考えていますが、合っていますか?
function my_unregister_taxonomy() {
unregister_taxonomy_for_object_type( 'category', 'post' );
}
add_action( 'init', 'my_unregister_taxonomy' );
を使って、管理画面から消しても、
wp_update_term(1, 'category', array(
'name' => 'Non Catégorisé',
'slug' => 'non-categorise'
));
等といった形で、プラグイン等から操作する事が出来ます。
なので、query_varsから、クエリやリライトルールを削除したりするよりは、テーマだけで完結する「なんちゃって」な方法にしたほうが、他のテーマに切り替えた時に影響も残らず、いいのではないかと思います。
function my_status404() {
if ( is_category( '1' ) ) {
global $wp_query;
$wp_query->set_404();
status_header( 404 );
}
}
add_action( 'template_redirect', 'my_status404' );
この手の処理、( 404で処理するような場合は、)my_status404内で、exit するのが普通に見えます。
category.php等が使われてない場合
category.php (デフォルトだけなら category-1.phpとか)を追加して、
中身をブランク、で何も表示しないようにするというのでは、どうですか?
/**
* Remove taxonomy.
*
* @link http://stackoverflow.com/a/6643207
*/
add_action( 'init', function () {
global $wp_taxonomies;
$taxonomy = 'post_tag';
if ( taxonomy_exists( $taxonomy ) )
unset( $wp_taxonomies[$taxonomy] );
} );
管理画面から、削除し、直接 URL を叩かれてもアクセスできないようにするようにはできたのですが、フロントページでアクセスできないようにするのは中々難しいですね・・・。
> nobitaさん、KUCKLUさん、ありがとうございます。
KUCKLUさんのコードを
$taxonomy = ‘category’ にして試してみたところ、
以下のような結果になりました。
・管理画面のカテゴリー → 非表示になる
・http://example.com/category/ → 404エラーになる
・http://example.com/category/未分類/ → 未分類のアーカイブページが表示される
テーマの構成はnobitaさんが書かれてるとおり、category.php等は使わずに、カテゴリアーカイブにもindex.phpを使用しています。
KUCKLUさんの環境では消えたとのことなので、テーマの構成とかが違うのかもですねー
テーマを変えたときの事を考えると、nobitaさんの「なんちゃって」方式が
良いのかなと思いました。
(nobitaさん返信おそくなってすみません)
色々試していたのですが
プラグインから、先ほどのコードを実行した場合
・管理画面のカテゴリー → 非表示になる
・http://example.com/category/ → 404エラーになる
・http://example.com/category/未分類/ → 404エラーになる
となりました。ただ、ちゃんとテストできていないので「大丈夫だ ! 問題ない。」とは言えないです。
nobitaさんの「なんちゃって」方式の方が安全なのかもしれませんね。
> KUCKLUさん、ありがとうございます。
検証のためにtwentyfifteenのfunxtions.phpの末尾にKUCKLUさんのコードを書いて
・http://example.com/category/未分類/ を表示してみたところ、
パーマリンク設定によって表示結果が変わりました。
・パーマリンク設定が投稿名 → 未分類のアーカイブページが表示される
・パーマリンク設定が投稿名以外 → 404エラーになる
もしかしてKUCKLUさんの環境ではパーマリンク設定が投稿名以外でしょうか。
パーマリンク設定によって表示が変わるということは、
nobitaさんが書かれてるようにプラグイン等から操作できてしまうと思うので、
やっぱりnobitaさんの「なんちゃって」方式が安全そうですね。
Miyauchiさんの「元から断つ」方法はもっと勉強してから出直してきますー。
Takayuki Miyauchiさん、nobitaさん、KUCKLUさん
ありがとうございました。