質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2693閲覧

wordpress apiでタグを文字で付与して記事を投稿したい

yoshi448

総合スコア17

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/08/19 14:22

編集2020/08/19 14:30

現在google app scriptとwp rest apiを使って記事を自動投稿する仕組みを作っています。
そこでタグをidではなく文字(またはslug)で付与して記事を投稿したいのですがそれができずに困っています。

gas

1var arguments = { 2 'title': title, 3 'content': "<p>" + description + "</p>" + "<a href="+article_url+"?c="+my_id+'><div class="more-button">続きを読む</div></a>', 4 'featured_media': imageID, 5 'status': 'publish', 6 'comment_status': 'closed', 7 'categories':28, 8 'tag':33 //ここをidではなく"hoge"のような文字列で投稿できるようにしたいです。 9 }; 10 11 var options = { 12 'method': 'POST', 13 'muteHttpExceptions': true, 14 'headers': headers, 15 'payload': JSON.stringify(arguments) 16 }; 17 var response = UrlFetchApp.fetch(apiUrl, options);

一度全てのタグを取得してソート、すでに登録してあればidをそのまま使ってなければtagを登録してからそのidを使うみたいな感じのコードを書いてもいいのですが、wordpressのような大きなサービス、絶対もう少しいい方法がありそうだと思い質問させていただきました。
何かいい方法があれば是非よろしくお願いいたします。

あと公式のリファレンスが個人的にわかりにくいのですが、今回のような問題を解決するのにいいサイトなどあったら教えていただけると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

調べても出てこなかったので自分で作りました。
あまりgasを使わないのと突貫工事だったこともあり、かなりコードがきたないですがこんな感じです。
文字列を付与するというよりもタグを全て取得して、タグが存在しているのならそのidを、ないなら新しく登録して登録したタグのidを使う感じにしました。
slackの3秒ルールに引っかかる場合は全てのタグをどこかに保存してそれを読み込むとかすればいいかもですね〜(今回は元から3秒超えてたので無視しました)

正直thisとかよくわからないのであってるかどうか…笑
まあとりあえずこれで動いたので自己解決しました!

gas

1function check_tag(tag){ 2 var url = "https://news.traicy.com/wp-json/wp/v2/tags"; 3 this.tags = UrlFetchApp.fetch(url); 4 this.exist=false 5 this.tag = tag 6 this.id = 0; 7 this.combine = []; 8 var tags = JSON.parse(this.tags.getContentText()); 9 tags.forEach(function(key){ 10 if(this.tag==key["name"]){ 11 this.id = key["id"]; 12 this.exist = true; 13 this.combine[0]=this.exist 14 this.combine[1]=this.id 15 }else{ 16 if(this.id==0){ 17 this.combine[0]=this.exist 18 this.combine[1]=this.tags 19 } 20 21 } 22 23 }) 24 return this.combine 25} 26 27function post_tag(name){ 28 var url = "https://yourURL/wp-json/wp/v2/tags"; 29 var user = 'your name'; 30 var pass = 'your password';//ここはApplication Passwordsで作ったパスワード 31 var headers = { 32 'Content-Type': 'application/json', 33 'Authorization': 'Basic ' + Utilities.base64Encode(user + ":" + pass) 34 }; 35 36 var arguments = { 37 'name': name, 38 }; 39 40 var options = { 41 'method': 'POST', 42 'muteHttpExceptions': true, 43 'headers': headers, 44 'payload': JSON.stringify(arguments) 45 }; 46 var wp_response = UrlFetchApp.fetch(url, options); 47 var responseJson = JSON.parse(wp_response.getContentText()); 48 return responseJson["id"]; 49 50}; 51 52var is_exist,tag = check_tag("投稿時に追加したいタグ名"); 53var tag_id; 54//タグがすでに登録されている場合 55if(is_exist){ 56 tag_id = tag 57} 58// タグが登録されていない場合はタグを追加してからidを取得 59else{ 60 tag_id = post_tag(media) 61}

投稿2020/08/21 09:43

編集2020/08/23 09:24
yoshi448

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問