t-yama

子カテゴリーのアーカイブパスの分岐について

0

ご質問です。

現状
A(0件)
 -A1(3件)
 -A2(3件)
 -A3(3件)
B(0件)
 -B1(3件)
 -B2(3件)
 -B3(3件)

というときに、カテゴリーのアーカイブパスを、
A1、A2、A3カテゴリーのときは、/a/%C.html
B1、B2、B3カテゴリーのときは、/b/%C.html
としたいです。

現状、アーカイブパスを

<mt:IfCategory name="A">/a/%C.html<mt:Else>/b/%C.html</mt:IfCategory>

としていますが、出力されません。

どの様に記述すれば宜しいでしょうか?
ご教授いただければ嬉しいです。

返信(10)

| 返信する
  • こんにちは。

    まず回答ですが、以下のコードでいかがでしょう。(当方の環境で動作することを確認しています)

    a/b/%C.html

    それと、実際のカテゴリ名やURLが不明なので予備回答になりますが、以下のようにすればもっとシンプルです。

    /%C.html

    恐らく、だと、カテゴリAに対して直接記事が投稿された場合にしかマッチしないのだと思われます。

    なので、記事が投稿されたカテゴリの「親カテゴリ」で処理を分岐するようにしています。例えば、記事がA1カテゴリに投稿された場合は、その親カテゴリがAであるかを調べるといった具合です。

    ※ mt:Ifで使用しているcategorylabelは運用に応じてcategorybasenameに変更してください。

  • /<mt:HasParentCategory><mt:ParentCategory><mt:IfCategory name="A">a<mt:Else>b</mt:IfCategory></mt:ParentCategory><mt:Else><mt:IfCategory name="A">a<mt:Else>b</mt:IfCategory><mt:HasParentCategory>/%C.html
    多分このような感じでいけると思います。

  • すみません。タグのエンコードを忘れていました^^;

    1つめ: <mt:TopLevelParent><mt:If tag="CategoryLabel" eq="a">a<mt:Else>b</mt:If></mt:TopLevelParent>
    /%C.html
    2つめ: <mt:TopLevelParent><mt:CategoryBasename></mt:TopLevelParent>/%C.html

    この2つです。

  • knm54様
    kei344様

    ご回答ありがとうございます。
    また、ご質問の仕方が悪くて、すみません。

    試してみましたところ、A.htmlではファイルが生成されました。

    ただし、希望としましては、

    A1.html
    A2.html
    A3.html

    を出力し、

    B1.html
    B2.html
    B3.html

    は出力しない

    という事を、分岐で実現したいと思います。

    大変お手数ですが、ご教授願えれば幸いです。

  • > A.htmlではファイルが生成されました。
    A1.html~A3.html、B1.html~B3.htmlは生成されなかったと言うことでしょうか。記事の無いカテゴリは生成されない仕様ですので、記事の有無をご確認ください。

    > 出力しない
    質問内容が変わるため、別トピックとして投稿されたほうが良いかと思います。

  • すみません。1つ教えてください。

    最初の投稿を拝見した時、私は次のような認識を致しました。

    A(0件)(アーカイブは出力しない)
     -A1(3件)(アーカイブは /a/A1.html で出力)
     -A2(3件)(アーカイブは /a/A2.html で出力)
     -A3(3件)(アーカイブは /a/A3.html で出力)
    B(0件)(アーカイブは出力しない)
     -B1(3件)(アーカイブは /b/B1.html で出力)
     -B2(3件)(アーカイブは /b/B2.html で出力)
     -B3(3件)(アーカイブは /b/B3.html で出力)

    そして、今回の投稿を拝見し、次のように認識を改めました。

    A(0件)(アーカイブは出力しない)
     -A1(3件)(アーカイブは /a/A1.html で出力)
     -A2(3件)(アーカイブは /a/A2.html で出力)
     -A3(3件)(アーカイブは /a/A3.html で出力)
    B(0件)(アーカイブは出力しない)
     -B1(3件)(アーカイブは出力しない)
     -B2(3件)(アーカイブは出力しない)
     -B3(3件)(アーカイブは出力しない)

    この認識はt-yama様の意図と合致しておりますでしょうか?

    • ご返信ありがとうございます。

      初回のご質問が誤っておりました。
      記載いただいた下記で合っております。

      A(0件)(アーカイブは出力しない)
       -A1(3件)(アーカイブは /a/A1.html で出力)
       -A2(3件)(アーカイブは /a/A2.html で出力)
       -A3(3件)(アーカイブは /a/A3.html で出力)
      B(0件)(アーカイブは出力しない)
       -B1(3件)(アーカイブは出力しない)
       -B2(3件)(アーカイブは出力しない)
       -B3(3件)(アーカイブは出力しない)

      何卒宜しくお願いいたします。

  • 一応、動作確認が取れたのでコードを掲載します。
    見やすくするためにインデントしてありますが、使用の際は1行にして下さい。

    <mt:ParentCategory>
        <$mt:CategoryBasename setvar="parent_cat"$>   
    </mt:ParentCategory>
    <mt:If name="parent_cat" like="A|C|F">
        <$mt:Var name="parent_cat"$>/%C.html
    </mt:If>


    注意:
    1.使用の際は、like="A|C|F" の部分を出力したいカテゴリのベースネーム(出力ファイル/フォルダ名に相当)に応じて書き換えてください。ベースネームは、掲載したコードの通り「|」で区切ります。

    2.「親カテゴリ(AやB)が必ず存在する」という前提で書いています。この前提が覆る場合は、修正必須です。

    3.ブログのURL設定で、末尾に「/(スラッシュ)」を入れていない場合等、404エラーになります。その場合は、<$mt:Var name="parent_cat"$>の前に「/(スラッシュ)」を入れて下さい。

    4.<$mt:Var name="parent_cat"$>/%C.html 以外のパスで出力したいカテゴリ出てきた場合は、<mt:ElseIf>を使って条件を追加してください。

    以上です。

返信する


カテゴリグループ

OpenID対応しています OpenIDについて