サポート » 使い方全般 » タームを出力する方法の種類を募集しています。

  • 解決済 koromochi

    (@koromochi)


    お世話になります。

    PHPで以下を出力したいです。

    ➀カスタムフィールド「field_eat」の値
    (例)フルーツ

    ➁カスタムタクソノミー「fruits」のターム
    (例)リンゴ、バナナ

    下記の自動ツイートが目的です。

    :::::::ツイート内容:::::::
    フルーツ
    リンゴ、バナナ
    【過去記事】
    http://example.com/kiji1
    :::::::::::::::::::::::::

    しかし➀➁が出力できず、質問させて頂きました。

    まず、自動ツイートライブラリ「tmhOAuth(https://github.com/themattharris/tmhOAuth)」を使っています。

    このように書くと、【過去記事】と、URLはツイートできます。

    $params = array(
        'status' => mb_strimwidth('【過去記事】' . get_permalink($post[0]->ID)
    );

    今回は➀➁のツイート方法として、下記のようにいくつか書いてみたのですが、いずれもURLしかツイートされません。

    《A》

    $params = array(
        'status' => post_custom($post->ID,'field_eat')."\n".get_the_terms($post->ID,'fruits')."\n". get_permalink($post[0]->ID)
    );

    《B》

    $field_eat = post_custom($post->ID,'field_eat');        
    $fruits = get_the_terms($post->ID,'fruits');
    
    $params = array(
        'status' => "{$field_eat}"."\n"."{$fruits}"."\n". get_permalink($post[0]->ID)
    );

    どなたか、➀「field_eat」の値と、➁「fruits」のタームを、出力する方法を教えて頂けませんでしょうか?

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • get_permalink() の引数(括弧の中)が $post[0]->ID なのですよね?

    それをもとに類推すると post_custom() の第1引数は $post->ID ではなく $post[0]->ID なのかもしれません。get_the_terms() も同様では?

    トピック投稿者 koromochi

    (@koromochi)

    こんばんは。ご回答誠にありがとうございます。

    残念ながら、そのように書くとエラーログに「その行がおかしいですよ」と出てしまうようでした。ツイートもされず、です。

    get_permalink($post[0]->ID)なのは間違いありませんが、他のところを同じようにget_terms($post[0]->ID,'fluits')などと書くとエラーなのです。

    その行だけではなく前後も確かめる必要がありますね。直そうとしているコードがテーマのテンプレート(ファイル)に書かれているのでしたら、テーマの入手先とテンプレート名と何行目なのかが分かればもう少しアドバイスもらえるかもしれません。

    ごめんなさい、直前のコメントは的外れでした。書き直します。

    まず post_custom() は投稿IDを指定できません。
    なので投稿IDを指定できる get_post_meta() を。

    次に get_the_terms() はタームの名前ではなくタームオブジェクトの配列を返すので用途が違います。なので get_the_term_list() が適切だと思います。
    http://wpdocs.osdn.jp/関数リファレンス/get_the_term_list

    もし出力されるHTMLタグが邪魔なら wp_get_post_terms() を使ってターム名の配列を取得できます。別のトピックのコメントですが、下記が参考になるかも。
    https://ja.wordpress.org/support/topic/タームの指定がなかった場合の条件判断について/#post-223263

    • この返信は6年、 1ヶ月前にgblsmが編集しました。
    • この返信は6年、 1ヶ月前にgblsmが編集しました。
    • この返信は6年、 1ヶ月前にgblsmが編集しました。
    • この返信は6年、 1ヶ月前にgblsmが編集しました。
    • この返信は6年、 1ヶ月前にgblsmが編集しました。
    • この返信は6年、 1ヶ月前にgblsmが編集しました。
    • この返信は6年、 1ヶ月前にgblsmが編集しました。
    トピック投稿者 koromochi

    (@koromochi)

    こんばんは。

    失礼いたしました。
    どうやらおっしゃる通り、$post[0]->IDが適切なようです。
    ただ、直接出力側に書く《A》ではエラーで、代入する《B》では大丈夫でした。(なぜ??)

    さらに、get_post_meta()が適切だというのもおっしゃるとおりのようです。

    色々な方に伺い、最終的に次のようにして、ひとまず解決いたしました。

    //ツイートするテキスト_代入
    $fruits = get_the_terms($post[0],'fruits');
    $fruits_name = '';
    $sep = "、";
    foreach( $fruits as $fruits_all ) {
    	if( $fruits_all !== end( $fruits )){			
    	$fruits_name .= $fruits_all->name.$sep;
    	}else{
    	$fruits_name .= $fruits_all->name;
    	}
    }
    
    //ツイートするテキスト_出力
    $params = array(
    	'status' => "{$fruits_name}".'\n'.get_permalink($post[0]->ID)
    );

    ↓↓結果↓↓

    :::::::ツイート内容:::::::
    リンゴ、バナナ
    http://example.com/kiji1
    :::::::::::::::::::::::::

    さて、上のコードでひとまず解決したわけですが、

    さいごにget_the_terms()get_the_term_list()のいずれが適切か?
    について、お手すきの折に教えていただければ幸いです。

    >タームの名前ではなくタームオブジェクトの配列を返すので用途が違う

    という点が少しわかりません。(かなり初心者です。)

    ★どのようなケースで使い分けるものなのでしょうか?

    ★また、今回のケースについて、どのような理由でget_the_term_list()が適切だとお考えになったのでしょうか?

    このトピックへの返信はこれで最後にします。
    以下の話題の続きは、新しくトピックを立てて続けてくださいね。
    それから、マルチポストはマナー違反とされているので、ご注意ください。

    さいごにget_the_terms()かget_the_term_list()のいずれが適切か?
    について、お手すきの折に教えていただければ幸いです。

    >タームの名前ではなくタームオブジェクトの配列を返すので用途が違う

    という点が少しわかりません。(かなり初心者です。)

    @koromochi さんはトピックの最初で次のように書きましたよね。

    PHPで以下を出力したいです。
    中略
    (2)カスタムタクソノミー「fruits」のターム
    (例)リンゴ、バナナ

    「タームを出力したい」の例がリンゴやバナナでしたから
    タームの名前を出力したいのだと判断しました。

    とりあえず「オブジェクトという言葉が何を指しているか」は後回しにして

    get_the_terms() はタームのオブジェクト(名前と同じものではありません)を返す関数
    get_the_term_list() はタームのHTML文字列を返す関数

    です。
    この「何々を返す関数です」という説明は WordPress の日本語Codexの説明ページに書かれています。
    (それぞれの関数の説明の冒頭に書かれているので、今のところはそこだけを眺めておけば良いと思います。)

    話が回りくどくなりましたが
    タームの名前というのは文字列ですよね。
    get_the_term_list() はタームのHTML文字列を返すので、役に立つかもしれないなと思ったわけです。

    ところで「オブジェクト」というのは、複数の違う種類のデータをひとまとめにしたもの、くらいに初心者のうちは思っておいて良いんじゃないでしょうか。
    例えば「@koromochi さん」というオブジェクトが仮にあるとします。
    するとオブジェクトの中には、名前、身長、体重などの(違う種類の)データがあるはずですよね。
    (もっと違う種類のデータ、例えば住所とか職業とかがあっても良いし、なくても良い。)
    これをタームに当てはめると、タームのオブジェクトの中には、タームの名前、ID番号、そのタームの親タームのID番号などが入っている、みたいな。

    この話を、「上のコードでひとまず解決したわけですが」のコードに当てはめると、こうなります。

    $fruits           → タームのオブジェクトの配列
    $fruits_all       → タームのオブジェクトひとつ
    $fruits_all->name → タームのオブジェクトひとつに含まれている name というデータ
    
7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「タームを出力する方法の種類を募集しています。」には新たに返信することはできません。