サポート » 使い方全般 » 投稿のカテゴリーを非表示時にURLを無効化するには

  • こんにちは。いつもお世話になってます。

    投稿のカテゴリーやタグを使用しない場合に、
    管理画面のサブメニューを非表示にする事があるかと思うのですが、

    function my_remove_submenus() {
    	remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' );
    	remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );
    }
    add_action( 'admin_menu', 'my_remove_submenus' );

    これだと、ただ非表示にしているだけで、
    デフォルトカテゴリー(未分類)の値が残っているので、

    http://example.com/category/未分類/

    と、URLを直接入力するとページが表示されてしまいます。
    カテゴリーを使用しない場合はカテゴリーそのものの値を削除するとか、
    404ページに飛ばすとか、URLを入力しても表示されないようにしたいです。

    function my_status404() {
    	if ( is_category( '1' ) ) {
    		global $wp_query;
    		$wp_query->set_404();
    		status_header( 404 );
    	}
    }
    add_action( 'template_redirect', 'my_status404' );

    で404に飛ばすことは出来るのですが、
    テンプレートにthe_title()とかが入ってるとやっぱり表示されてしまいます。

    the_title()とかもif文で消せばいいのですが、
    もっと他によい方法がありましたら教えていただけると幸いです。
    どうぞよろしくお願い致します。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • Mignon Styleさんのコードは捨てて、以下のコードをどこかに入れればカテゴリーという機能そのものが投稿から無効化されます。
    表面的な部分で対処しようとしないで元から断つのがコツです。

    add_action( 'init', function(){
        unregister_taxonomy_for_object_type( 'category', 'post' );
    } );

    unregister_taxonomy_for_object_type()

    ※ 追記

    上のコードはクロージャを使ってるのでPHP5.3以降じゃないと動作しません。

    スレッド開始 Mizue Imai (Mignon Style)

    (@mignonstyle)

    > Takayuki Miyauchiさん
    ありがとうございますー!

    Miyauchiさんのコードで管理画面のメニューは非表示に出来ましたが、URLを入力するとページが表示されてしまいます。

    これはデフォルトカテゴリーの値がデータベースに残ってるから消せないものなのでしょうか?

    query_varsからも消さないといけないっぽいですね。
    そのうえでrewriteをflushすればいいんじゃないかと。
    もしそれでもだめならrewriteからもcategoryを消してflushかな。

    スレッド開始 Mizue Imai (Mignon Style)

    (@mignonstyle)

    ありがとうございます。
    とりあえずわかるところまで試してみました。

    デフォルトカテゴリーのカテゴリー名は「未分類」から「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 を叩かれてもアクセスできないようにするようにはできたのですが、フロントページでアクセスできないようにするのは中々難しいですね・・・。

    スレッド開始 Mizue Imai (Mignon Style)

    (@mignonstyle)

    > 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さんの「なんちゃって」方式の方が安全なのかもしれませんね。

    スレッド開始 Mizue Imai (Mignon Style)

    (@mignonstyle)

    > KUCKLUさん、ありがとうございます。

    検証のためにtwentyfifteenのfunxtions.phpの末尾にKUCKLUさんのコードを書いて
    ・http://example.com/category/未分類/ を表示してみたところ、
    パーマリンク設定によって表示結果が変わりました。

    ・パーマリンク設定が投稿名 → 未分類のアーカイブページが表示される
    ・パーマリンク設定が投稿名以外 → 404エラーになる

    もしかしてKUCKLUさんの環境ではパーマリンク設定が投稿名以外でしょうか。

    パーマリンク設定によって表示が変わるということは、
    nobitaさんが書かれてるようにプラグイン等から操作できてしまうと思うので、
    やっぱりnobitaさんの「なんちゃって」方式が安全そうですね。

    Miyauchiさんの「元から断つ」方法はもっと勉強してから出直してきますー。

    Takayuki Miyauchiさん、nobitaさん、KUCKLUさん
    ありがとうございました。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「投稿のカテゴリーを非表示時にURLを無効化するには」には新たに返信することはできません。