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

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

新規登録して質問してみよう
ただいま回答率
85.48%
タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

3回答

3258閲覧

入力済みカスタムフィールド値をタームとしてカスタムタクソノミーに一括登録するには?

M.Y.

総合スコア29

タグ

特殊な記法により文書に埋め込む形で記述される付加情報をタグと呼びます。文書構造や書式、文字飾りなどを指示したり、画像や他の文書へのリンクを埋め込むことができる。

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/12/10 08:03

編集2019/01/20 19:33

前提・実現したいこと

 蔵書・読書管理サイト「メディアマーカー」が来月サービス終了します。
http://mediamarker.net/news/482
自分の登録したデータはCSV形式でエクスポートできるので、これをWordPressに移行したい。
http://mediamarker.net/u/bookish/
多彩な機能(※)の全ては無理でも、現在自分が使用中の機能だけならデータベースとして再現可能ではないか、とワードプレス初心者ながら愚考しました。
http://mediamarker.net/help/function

試したこと

 プラグインReally Simple CSV Importerでインポートはできました。
出力項目は以下の通り。

タイトル   
リンクURL   
アマゾンID(アフィリエイトID)   ※リンクURLにアマゾンIDを含める場合
イメージ画像URL(小)   
イメージ画像URL(中)   
カテゴリ   
ジャンル   
著者   
出版社(発売元)   
出版日(発売日)   
ISBN/JAN   ※ISBN番号またはJANコード 例) 9784862761002など
定価   
アマゾン価格   
ASIN(アマゾン商品コード)   ※10桁の英数字。例) B000COQC9C、475691084X など
登録日   
更新日   
タグ   
コメント   
評価   0:評価なし、1~5まで
ウィッシュ   1:アイコンあり
所有   1:アイコンあり
お気に入り   
購入日   
購入金額   
状態   
読了日   
公開・非公開   0:公開、1:非公開

 以上27項目のうち、「タイトル」「登録日」「カテゴリー」「タグ」「コメント」(記事本文)以外は、WordPressではカスタムフィールドになります。
各種キーによるソートとキーを組み合せた絞り込み検索が、ブクログ等のウェブ本棚サービスの中でメディアマーカーならではの長所でしたので、カスタムフィールドの活用は必須です(プラグインList category postsの豊富なパラメーターに近いか?)。
http://mediamarker.net/u/bookish/advanced
http://rocknit.net/digital/wp/list-category-posts/
特に「著者」「出版社」はメディアマーカーのウェブページではリンク表示され、クリックすると同じ著者・同じ出版社の一覧が表示されます。つまりブログのタグ同様ですが、既に「タグ」は別項目として登録済なので、Wordpressではカスタムタクソノミーとして扱ったら良いかと。
そこで、カスタムフィールド値をタームとしてカスタムタクソノミーに一括登録する方法が知りたく、質問する次第です。
カスタムフィールドはプラグインAdvanced Custom Fieldsにて、カスタムタクソノミーはCustom Post Type UIにて作成できましたが、既に投稿にインポートされたフィールドの入力値をタクソノミーへ移すか紐づけるかするやり方が、どうにも解りません。
Yahoo!知恵袋に類似の問題で良いプラグインはないかとの質問がありましたが、WP Taxonomy Importでは駄目みたいで、まともな回答もありませんでした。プラグイン無しでphpプログラムを組むのでも(あまりに難解でなければ)結構です。
Cf. タクソノミーのタームにカスタムフィールドの値をcsv一括で登録したい
また、共著や翻訳書など「著者」が複数ある本の場合は一つの欄内にカンマ区切りで入力してあるのですが、これをどう処理すればよいかも問題になります。
御教示戴ければ幸甚です。

追記

 回答によれば、カスタムフィールドとしてインポートしてからカスタムタクソノミーに変換するのでなく、「最初からやり直す」、つまり投稿を全て削除し、先にWordPressの方でカスタムタクソノミーとして「著者」「出版社」を登録してからCSVデータをインポートし直せとのことでした。
さてその場合、別の問題が生じます。
再現したかったMediaMarkerの機能では「登録日、更新日、ランク、タイトル、読了日、購入日、著者、出版社、ユーザー数、出版日で並べ替え可」でした(ユーザー数は不要)。
メディアマーカー - 機能一覧
しかし「著者」「出版社」をカスタム分類とした場合、このソートができなくなるみたいです。カスタムフィールドによるソートの方法は検索すれば幾らも出てくる一方で、カスタムタクソノミーの場合は絞り込み(フィルタリング)の方法は紹介が多いけどorderbyで排列順序を変更する方法が見つからない。そもそも「著者」みたいにコンマ区切りで複数の値が入ったタクソノミーだとどの値でその投稿の順序を決めればよいやら、カスタムフィールドみたいにorderby=meta_value&meta_key=authorsとかやっても順列が指示できないわけなのかと察せられます。
著者名・出版社名をクリックすると同じ著者・同じ出版社のアイテム一覧が表示される仕組みにするにはカスタムタクソノミーにする方がいいかと思ってのことでしたが、では、この絞り込み機能をカスタムフィールドのまま実現させればカスタムタクソノミーに変換せずとも済むのでは?
WordPress のURLクエリストリングにカスタムフィールドを指定して絞り込み検索する
それをやるとURLでのクエリーは?meta_key=authors&meta_value=著者名となりますが、このカスタムフィールドの値による絞り込み結果を更に「並べ替え」したい時、困ります。ソート順序にカスタムフィールドを使用する場合、例として出版日(pdate)ならクエリーは?order=ASC&orderby=meta_value&meta_key=pdateになるから、meta_keyがかぶってしまって、全投稿のソートにはなっても先の抽出結果のソートにならないのです。クエリーでのパラメーターmeta_keyの重複衝突の問題は、逆に全投稿を指定したソート順序のままカスタムフィールド値で絞り込みしたい時にも、起きるはず。あちらを立てればこちらが立たず、です。
ならば、元のCSVで「著者」の列をコピーしておいて、カスタムフィールドとカスタムタクソノミーのそれぞれにインポートし、どちらも並立させる手でどうか? ちょっと無駄な重複みたいですけど……。まあ既存の登録をインポートする分にはそれでも済むかしれませんが、今後投稿を新規作成する際に難儀です。編集入力欄に「著者」が二つできるし、しかもそれが不一致になるミスに気をつけなければならない。できればそんな手間を省き、一度入力すればカスタムフィールド「著者」とカスタムタクソノミー「著者」の双方に値が入る感じの設定が望ましい。
結局、カスタムフィールドの入力値をタクソノミーへ移すか紐づけるかするやり方が、求められます。逆方向で、或るカスタムタクソノミー(のターム)を或るカスタムフィールド(の値)へ、でもいいわけですけども、とにかくどうにかして両者を連動させる方法は、ありませんか。
(2019-01-20追記)通常ポストでなくカスタム投稿の場合ですが、「カスタム分類のタームはカスタムフィールドの入力値とする」やり方を書いたページが下記に作成されたのを発見。
カスタムフィールドの入力値をタームに保存する設定等

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

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

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

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

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

CHERRY

2018/12/10 08:28

現在どのように インポートしているのでしょうか? Filter hook を設定されたりしていますか?
M.Y.

2018/12/10 08:38

エクスポートしたcsvデータをGoogleスプレッドシートで開き、先頭の一行の各列名を変更(例、登録日→post_date)、更にpost_typeの列を新たに挿入してから、Really Simple CSV Importerでインポートしました。フィルターフックについては無知でいま検索してみましたが、どう関係するのか、Really Simple CSV Importerではどう設定するのやら、わかりません。
guest

回答3

0

エクスポートしたcsvデータをGoogleスプレッドシートで開き、先頭の一行の各列名を変更(例、登録日→post_date)、更にpost_typeの列を新たに挿入してから、Really Simple CSV Importerでインポートしました。

それはどうやって? カスタムフィールド(の値)をカスタムタクソノミー(のターム)としてテーブルに入れるやり方、そこがわからないので質問したのです。

プラグインの公式情報 Really Simple CSV Importer - WordPress Plugins の 「AVAILABLE COLUMN NAMES AND VALUES:」より

tax_{taxonomy}: (string, comma separated) Any field prefixed with tax_ will be used as a custom taxonomy. Taxonomy must already exist. Entries are names or slugs of terms.

とありますので、tax_カスタムタクソノミー名 を使えば、インポート先として、カスタムタクソノミーが、指定できるようですが...

(string, comma separated)

とも書かれているので、カンマ区切りで複数指定できるようです。

投稿2018/12/10 08:41

CHERRY

総合スコア25171

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

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

M.Y.

2018/12/10 09:01

有り難うございます。そこを見落してました。 データをインポートしてからその名に合せて後からカスタムフィールドを作成したら値が反映されたのですが、tax_{taxonomy}は順序が違って「カスタムタクソノミー(カスタム投稿タイプのカテゴリやタグなど)を登録している場合、指定が可能です」とのこと。 https://www.moco358.com/archives/3744#i-4 カスタムタクソノミーがカスタム投稿タイプ用なら通常の投稿ページで制作する自分には関係無いかと思ったものの、別にカスタム投稿でなくとも新規投稿の入力に利用できるみたいで。
guest

0

「Really Simple CSV Importer」はカスタムタクソノミーにも一括代入できるはずなので、入れなおしてみてはいかがでしょうか。

投稿2018/12/10 08:06

kei344

総合スコア69407

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

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

M.Y.

2018/12/10 08:20 編集

それはどうやって? カスタムフィールド(の値)をカスタムタクソノミー(のターム)としてテーブルに入れるやり方、そこがわからないので質問したのです。 「Really Simple CSV Importer 日本語解説」には見当たりませんでした。 http://notnil-creative.com/blog/archives/3465
kei344

2018/12/10 09:22

> tax_{taxonomy}: (文字列、カンマ区切り) 接頭辞 tax_ で始まるフィールドは、カスタムタクソノミーとして使われます。タクソノミーはすでに登録済みである必要があります。入力値はタームの名前、またはスラッグです。 上記部分がカスタムタクソノミーに入れる部分です。 今インポートした物を削除して、最初からやり直すという回答です。
kei344

2018/12/22 03:54

【追記に対しての回答:】 > ソートができなくなるみたいです そうですね。ソートのためにカスタムフィールドを併用する必要がありますね。 > クエリーは"?order=ASC&orderby=meta_value&meta_key=pdate"になるから、meta_keyがかぶってしまって 自分でクエリ文字列を定義して、それを利用するための処理を書く必要があります。条件を何らかの形で組んで、pre_get_postsで受け取った条件で絞込みをします。WordPressは記事の取得にWP_Queryを使用し、pre_get_postsはそのパラメータを操作するフックになっています。WP_Queryは複数の条件や複雑なorder条件に対応するので、要件にあった挙動も多分できるでしょう。 【WP_Queryの使い方をPHPコードにまとめた便利なコード・スニペット】 http://notnil-creative.com/blog/archives/1288 【WordPress4.0から使えるようになった複雑な’oderby’を使ってみる】 https://geek-memo.com/orderby/ そこまで組んでしまうならカスタムタクソノミーは不要です。 ※ WordPressの規定動作として設計されている物を使うほうが維持管理がしやすいとは思ったのでカスタムタクソノミーをお勧めしました。
M.Y.

2018/12/22 05:31

>自分でクエリ文字列を定義して、それを利用するための処理を書く  あゝ、ハードルが高い……。 >そこまで組んでしまうならカスタムタクソノミーは不要です。  いえ、まだ不要にはできないみたいで。  共著や翻訳書など著者フィールドに値の著者名が複数入る場合が問題になります。例、『指輪物語』なら、「トールキン,瀬田貞二」。カスタムフィールドではカンマ区切りの複数の値を区分せず一括で処理するのか、クエリー"?meta_key=authors&meta_value=瀬田貞二"をurlに附加しても該当アイテムを抽出してくれませんでした。複数の値を入力したそのままの形にして"meta_value=トールキン,瀬田貞二"でしか絞り込みが有効になりません。  これは、やはりカスタム分類にしないと解決できないことなのでは。或いは、カスタムフィールドのmeta_valueでも複数の値を別々に取り扱ってそれぞれの値で絞り込み表示ができるのかもしれませんが、検索した限りではやり方が見つけられませんでした。
kei344

2018/12/22 05:48

「そこまで組んでしまうなら」は「自分でクエリ文字列を定義して、それを利用するための処理を書く」に対してのコメントです。 > やはりカスタム分類にしないと解決できないことなのでは。 WP_Queryのmeta_query で処理すれば出来ます。 どちらにせよクエリ文字列を制御する方法以外に複数パラメータの自由なソーティングは不可能です。 もしくは、REST API使って全部JavaScriptで書いてしまうかですね。 【WP REST API v2 Documentation】 https://ja.wp-api.org/
guest

0

回答によれば、カスタムフィールドとしてインポートしてからカスタムタクソノミーに変換するのでなく、「最初からやり直す」、つまり投稿を全て削除し、先にWordPressの方でカスタムタクソノミーとして「著者」「出版社」を登録してからCSVデータをインポートし直せとのことでした。

投稿の数によりけりじゃないですかね。
カスタム分類だけとりあえず問題にすると、
とりあえず、出版社と著者の一覧をつくる(データベースでいうところの正規化?)。
wp_termテーブルにそれぞれの一覧を書き込む(SQLとか)。term_idと名前の紐付け。
出版社と著者それぞれのカスタム分類設定する。wp_term_taxonomyテーブルでterm_idとカスタム分類を紐づけ。それぞれにterm_taxonomy_idが設定される。
最後にwp_term_relationshipテーブルで、term_taxonomy_idと投稿id(たぶんobject_idだったような)を紐づける。

ちなみにカスタムフィールドはwp_postmetaテーブルに保存される。

具体的なコードは素人なので書けません。
カスタムフィールドについてはwordpressのコーデックスのadd_meta_box。
分類の登録についてはwp_set_object_terms。
保存についてはsave_post。

自分は通販サイトのブランドの登録について、カスタムフィールドに登録すればカスタム分類にも適用できるようにならないかと模索中。

投稿2019/01/28 04:36

z6zookbn

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問