サポート » 使い方全般 » wp_insert_post からの投稿タグ付けについて

  • 解決済 hiyokaji

    (@hiyokaji)


    はじめまして、hiyokaji といいます。
    どうにも手に負えないので質問させてください。

    twitter からの投稿でブログを更新したいと思っています。
    そこで TwitterTools(バージョンは 2.4)を利用しているのですが、twitter のハッシュタグも自動的に WordPress の投稿タグとして変換できるようにと、一部を改変しています。
    (twitter-tools.php の do_tweet_post() です)

    ここに wp_insert_post があったので、
    ‘tags_input’ => [ ‘<tag>, <tag>, <…>’ ] とパラメータを追加し、つぶやきを解析して取得したハッシュタグを書き込んでみましたがうまく動作しません。
    具体的には、投稿タグとしてデータベースには投稿されるのですが投稿とはリンクされないのです。
    ・投稿タグデータベースに追加されたタグの「投稿数」が 0
    ・投稿記事一覧ではタグなし

    パラメータには配列を変数で入れるようにしています。
    これは wp_insert_post の通常動作なんでしょうか?
    投稿記事とリンクさせるのはどうすればいいのでしょうか?

    WordPress のバージョンは 3.0.1 です。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック投稿者 hiyokaji

    (@hiyokaji)

    すみません、変更内容は以下の通りです。

    twitter-tools.php(変更前)

    function do_tweet_post($tweet) {
    global $wpdb;
    remove_action(‘publish_post’, ‘aktt_notify_twitter’, 99);
    $data = array(
    ‘post_content’ => $wpdb->escape(aktt_make_clickable($tweet->tw_text))
    , ‘post_title’ => $wpdb->escape(trim_add_elipsis($tweet->tw_text, 30))
    , ‘post_date’ => get_date_from_gmt(date(‘Y-m-d H:i:s’, $tweet->tw_created_at))
    , ‘post_category’ => array($this->blog_post_category)
    , ‘post_status’ => ‘publish’
    , ‘post_author’ => $wpdb->escape($this->blog_post_author)
    );
    $data = apply_filters(‘aktt_do_tweet_post’, $data, $tweet); // return false here to not make a blog post
    if (!$data) {
    return;
    }
    $post_id = wp_insert_post($data);
    add_post_meta($post_id, ‘aktt_twitter_id’, $tweet->tw_id, true);
    wp_set_post_tags($post_id, $this->blog_post_tags);
    add_action(‘publish_post’, ‘aktt_notify_twitter’, 99);
    }

    変更後

    function do_tweet_post($tweet) {
    global $wpdb;
    remove_action(‘publish_post’, ‘aktt_notify_twitter’, 99);

    // 追加箇所
    preg_match_all(‘$(^|[^0-9A-Z&/]+)([##]+)([0-9A-Z_]*[A-Z_]+[a-z0-9_üÀ-ÖØ-öø-ÿ]*)$i’, $tweet->tw_text, $matches);
    $tags = $matches[3];

    $data = array(
    ‘post_content’ => $wpdb->escape(aktt_make_clickable($tweet->tw_text))
    , ‘post_title’ => $wpdb->escape(trim_add_elipsis($tweet->tw_text, 30))
    , ‘post_date’ => get_date_from_gmt(date(‘Y-m-d H:i:s’, $tweet->tw_created_at))
    , ‘post_category’ => array($this->blog_post_category)
    , ‘post_status’ => ‘publish’
    , ‘post_author’ => $wpdb->escape($this->blog_post_author)

    // 追加箇所
    , ‘tags_input’ => $tags
    );
    $data = apply_filters(‘aktt_do_tweet_post’, $data, $tweet); // return false here to not make a blog post
    if (!$data) {
    return;
    }
    $post_id = wp_insert_post($data);
    add_post_meta($post_id, ‘aktt_twitter_id’, $tweet->tw_id, true);
    wp_set_post_tags($post_id, $this->blog_post_tags);
    add_action(‘publish_post’, ‘aktt_notify_twitter’, 99);
    }

    上記の通り、追加は 3 行のみです。
    おねがいします。

    こんにちは、

    $matches[3]には、具体的には、どんなのが入りますか?

    トピック投稿者 hiyokaji

    (@hiyokaji)

    nobita さん、レスありがとうございます。
    つぶやきの内容を

    こんにちは。 @hiyokaji #test #wordpress #code

    とした場合、test, wordpress, code の配列がこの順序で入ります(この場合 3 つ)
    正規表現はオリジナルではなくて、
    http://github.com/mzsanford/twitter-text-php
    のライブラリ(twitter 開発チームの一員の mzsanford 氏作成)からのコピーです。
    Twitter Tools 内にも同様の正規表現があったのですが、ハッシュタグが複数になると上手く取得できないものだったので使っていません。

    引数の問題ですか?
    WordPress の関数リファレンスを読んだんですけど、いまいちピンときませんでした。

    よくわかっていませんけど

    $my_post['tags_input'] = array("test", "wordpress", "code" );

    とかなら、私の環境では、test,wordpress,codeのリンクが出来て、それぞれ、作ったエントリにリンクします。

    $my_post['tags_input'] = "test,wordpress";

    とかではないですよね

    はじめまして。
    プラグイン全体の動きがわからないのですが、下から3行目
    wp_set_post_tags($post_id, $this->blog_post_tags);

    wp_set_post_tags($post_id, $this->blog_post_tags, true);
    にしたり、コメントアウトするとどうでしょうか。

    wp_set_post_tagsはデフォルトだと追加ではなく上書きするみたいです。
    http://codex.wordpress.org/Function_Reference/wp_set_post_tags

    トピック投稿者 hiyokaji

    (@hiyokaji)

    丁寧なレスありがとうございます。

    nobita さん
    $tags が配列だと思い込みで書いてました。
    実際きちんと配列でしたが、確認したわけではなかったのですみませんでした。

    y_yu さん
    ビンゴです!
    wp_set_post_tags の関数を完全に見落としてました。
    実際、wp_insert_post って「投稿データ(拡張以外)」を全て insert するものだとばかり思ってたので、「なんでタグ(入れ物)を作るだけなの?」とかなり戸惑ってました。
    なるほど、wp_insert_post の成功で $post_id が帰ってきて、それと連動させるのが wp_set_post_tags なんですね。

    nobita さん、y_yu さん、おかげさまで助かりました。
    ありがとうございます。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「wp_insert_post からの投稿タグ付けについて」には新たに返信することはできません。