サポート » 使い方全般 » カテゴリ情報の[name]を出力すると末尾に[1]が勝手につく

  • <?php
    $cat=get_the_category();
    echo print_r($cat[0]->name);
    ?>

    と出力すると、記事のカテゴリである「コースガイド」と出力したいのですが、
    勝手に末尾に[1]が付与され、「コースガイド1」という形で出力されます。

    原因と解決法をご存知の方がいらっしゃると教えて頂きたいです。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • 他のカテゴリーの場合はどうでしょう

    トピック投稿者 dance_bow

    (@dance_bow)

    すべてのカテゴリーにもつきます。

    ちなみに、カテゴリ情報をすべて出力すると以下のように表示されます。

    stdClass Object ( [term_id] => 6 [name] => コンペ情報 [slug] => competition [term_group] => 0 [term_taxonomy_id] => 6 [taxonomy] => category [description] => [parent] => 0 [count] => 1 [object_id] => 55 [filter] => raw [cat_ID] => 6 [category_count] => 1 [category_description] => [cat_name] => コンペ情報 [category_nicename] => competition [category_parent] => 0 ) 1

    上記のようになり、ここにも[1]がついてきます。

    そのコードを書いたテンプレート(phpファイル)の後ろのほうに 1 があるのでは?

    echoとかprint_rの表示の外で「1」は表示されているように感じられます。

    <?php
    $cat=get_the_category();
    echo 'cat=';
    print_r($cat[0]->name);
    echo '<br />';
    ?>

    としたとき、どのような結果になりますでしょうか。

    トピック投稿者 dance_bow

    (@dance_bow)

    phpファイル(single.php)を確認してみたところ不要な数字の[1]は確認できませんでした。

    トピック投稿者 dance_bow

    (@dance_bow)

    <?php
    $cat=get_the_category();
    echo 'cat=';
    print_r($cat[0]->name);
    echo '<br />';
    ?>

    とした所、結果は

    cat=コンペ情報

    となり、[1]は表示されませんでした!
    どういう理由なのでしょうか。

    プラグインのどれかが影響している(停止して違いを確かめる)、テーマが特別なものである、などが考えられます。

    トピック投稿者 dance_bow

    (@dance_bow)

    プラグインを停止して試みたところ変化がなかったのでプラグインに原因はないようです。
    素人が作ったオリジナルテーマなので、きっとテーマの方に問題があると思います。

    どのページでも同様の現象が起きていることからベースの部分の初歩的なミスなのではないかと思いますので一つ一つかみくだいてみます。

    ちなみになんですが、このような時はどのようにチェックしていくのがよいなど、ございましたらアドバイス頂けると幸いです。

    お手数をおかけいたしますがよろしくお願い致します。

    テーマをデフォルトにして、ループ部分に当該コードをかいて検証してみるとどうですか?

    もしそれでも1が書き出されるようであればテーマ作成中に誤ってコアのファイルに不要なコード(文字列)が入ったと考えられるのでは?

    結論から言うと、これはバグ等ではなく、PHPとして正しい動きをしていると思われます。
    そもそも、print_r で出力できるため、echo する必要が無いです。

    echo print_r することでどうなるかというと、
    print_r した際の返り値(出力する内容ではありません)を echo することになります。
    そして、print_r の返り値は通常TRUEです。
    PHP: print_r – Manual

    ここは少し難しいのですが、TRUE or FALSE は論理値と言われるものなので、echo したときはそのままTRUEが出力されるのではなく、1に変換されます。普通はそんなことしないので、あまり気付きませんが。
    boolean – PHP – Get bool to echo false when false – Stack Overflow

    ですので、今回のコードのみを見た場合、echoとprnt_rは同時にしないのが正しい記述と思われます。

    Ayustar さんへ。
    「echo」も書かれていたのですね。
    「1 はtrueだろうから、この後の行にきっと余計なコードがあるんじゃないかなー」とか思ってましたが…こういうのって気付かないですよね…!

    dance_bow さんへ。
    print_r は配列を表示するものですが、単独で使用します。

    <?php
    print_r($cat);
    ?>

    echoと似てるけど、関数チックな使い方なので、間違えやすいかも知れません。

    preタグで囲んであげると、改行付きで綺麗に表示させられます。

    <?php
    echo '<pre>';
    print_r($cat);
    echo '</pre>';
    ?>

    同様のトピックをもう一つ上げられているようなので、解決したら両方とも閉じていただけると幸いです。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「カテゴリ情報の[name]を出力すると末尾に[1]が勝手につく」には新たに返信することはできません。