サポート » 使い方全般 » カテゴリーの最初の文字列を省いて表示したい

  • 解決済 akihiro

    (@akihiro)


    カテゴリーリストの各カテゴリーの順番をCategory Orderなどのプラグインを使わずに変更させたいと思っています。

    各カテゴリー名の先頭に数字(3文字分)を付けてカテゴリーの順番付けし、
    mb_strcut関数を用いてカテゴリー文字列の開始位置をずらす(先頭の数字部分を除く)方法を考えているのですが、mb_strcut関数とwp_list_categoriesをどう絡ませたらよいのか分からないままでいます。

    ご教示していただけたら幸いです。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    akihiroさん、こんにちは。

    wp_list_categoriesで表示されるカテゴリー名を辿っていくと、wp-includes/classes.phpのWalker_Categoryクラスstart_elメソッド(ver2.7で1310行目)に行き着きます。このメソッド冒頭に記述されている変数$cat_nameがカテゴリー名であり、list_catsというフィルターフックが用意されていますので、これを利用するとお考えになっている方法は出来るかと思います。

    ただし、カテゴリー名は他でも利用されますから、他にも修正またはフックが必要となる可能性が高いです。

    代替案として、カテゴリースラッグでソートさせる方法などはどうでしょう。codexにはorderbyパラメータの値として記載されていないので、他のバージョンで動作するか不明ですが、ver2.7では問題なく動作するようです。以下、サンプルコードです。

    <?php wp_list_categories('show_count=1&orderby=slug&title_li=<h2>' . __('Categories', 'kubrick') . '</h2>'); ?>

    トピック投稿者 akihiro

    (@akihiro)

    jim912さん、ご丁寧なご教示ありがとうございます。

    順序が前後しますが、まず代替案のorderby=slugによる方法から説明させてください。
    私の頭の中では、この方法があることをすっかり見落としていました(汗)
    一般的にはこの方法で充分ですよね。
    ただ、
    1.私の今手がけているサイトのカテゴリー数が数百に及んでしまうため、もとからロケ番を付けないと管理が難しい。
    2.リスト上は思い通りになっても管理画面上は名前順に並んでしまうため、やはり管理が繁雑になってしまう。
    といった理由から断念せざるをえませんでした。

    wp_list_categoriesで表示されるカテゴリー名を辿っていくと、wp-includes/classes.phpの Walker_Categoryクラスstart_elメソッド(ver2.7で1310行目)に行き着きます。このメソッド冒頭に記述されている変数$cat_nameがカテゴリー名であり、list_catsというフィルターフックが用意されていますので、これを利用するとお考えになっている方法は出来るかと思います。

    なるほど。追跡の仕方まで非常に参考になりました。
    そこで、Codexも参考にしながら(WordpressもPHPも初心レベルなので)

    function rem_number($cat_name) {
                 $numless = mb_strcut("$cat_name",3);
                 return $numless;
    }

    といった(カタコトの?)関数を作り、以下の通りフックさせてみたところ、
    リスト上では思い通りの表示をさせることができました。

    add_filter('list_cats','rem_number');

    ところが、ここで二次的な問題が発生しました。
    管理画面上で、ファイル更新やプラグインの停止など
    (カテゴリーとは関係のない作業の)変更に関わるアクションを起こすと、
    そのページが真っ白になってしまうのです
    (リロードすると元の状態に戻り、その作業による変更も反映されてはいます)。
    また自作のプラグインを停止すると正常な状態に戻ります。

    何かお気づきの点がございましたら、ご指摘していただけると幸いです。

    モデレーター jim912

    (@jim912)

    akihiroさん、こんにちは。

    私の環境で同様のプラグインを入れてみましたが、残念ながら再現できませんでした。
    可能性としては、利用されているプラグインと衝突している可能性が考えられますので、他のプラグインを停止してみた場合なども試してみてください。

    あとは、エラー表示をなされていないのであれば、.htaccessに

    php_flag  display_errors On

    と記述すると発生しているエラーが表示されるので、原因を特定できやすくなります。(ほかの原因で真っ白になる場合も多々ありますが。。。)

    トピック投稿者 akihiro

    (@akihiro)

    jim912さん、お忙しい中、ありがとうございます。

    ご指摘通り、エラーログを調べたところ以下のようになっていました。

    PHP Warning:
    Cannot modify header information – headers already sent by
    (output started at /home/example/example.net/public_html/wp-content/plugins/numberless-category/cat-num-cut.php:20)
    in /home/example/example.net/public_html/wp-includes/pluggable.php on line 850,

    そこで、wp-includes/pluggable.php on line 850で検索をかけたところ、フォーラムの「BOM 有りで保存」の問題に突き当たりました。

    ただ、私はこのファイルをUTF-8Nで保存していたので、おそらく目に見えていない何者かが悪さしているのでは?と思いコメント周りの空行削除等をしてみたところ、それ以降はエラーにはなりませんでした。素人なので確固とした原因分析をすることができないのですが、おそらくコメント周りに全角スペースを入れてしまい問題になったのだろうと推定し、対策として全角スペースにはマーク表示するようにエディタの設定を変更しました。

    お騒がせしてしまい大変申し訳ありません。
    おかげで無事解決することができました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カテゴリーの最初の文字列を省いて表示したい」には新たに返信することはできません。