welcart
welcartでcustom field templateプラグインを使う
welcart では公式に「カスタムフィールド系のプラグインには対応していません。」と表明しているのですがそう言われていても使いたい場面はあります。
そこで無理を承知でカスタムフィールドテンプレート系のプラグインを2つ試してみました。
結果:
WordPress 3.8.3 + Welcart 1.3.13 + Custom Field Template 2.2.1 は何とか使えました。
WordPress 3.8.1 + Welcart 1.3.13 + Custom Field GUI Utility 3.3.0 は使えませんでした。
お勧め出来ませんがどうしても使いたいんだという方の参考になるかもしれませんので書き残そうと思います。
まず、welcart では商品マスタ(商品情報)を投稿( post_type = post )として処理しています。
商品情報がカスタム投稿タイプで表現されているのではなく、通常の「投稿」と同じポストとして定義されていることは特徴的でとても重要なことなので覚えておいて下さい。
welcart でカスタムフィールドを使いたい場面は大きく分けて2つ考えられます。
一つはwelcartの「新規商品追加」にカスタムフィールドを追加したい場合、
もう一つはブログやニュースなどの用途で WordPress標準の「投稿」にカスタムフィールドを追加したい場合です。
【welcart「新規商品追加」にカスタムフィールドを追加したい場合】
取り敢えず動作するのですが次のような問題が発生しました。
新規商品追加で商品情報を入力して追加したカスタムフィールドにも入力を行い、「公開」ボタンを押下すると入力した筈のカスタムフィールドの情報が空になってしまいます。
Custom Field Template の「読込」ボタンを押せば入力した内容が表示されますが「公開」ボタン押下で入力した内容が空になってしまうのは好ましくありません。
WordPress 標準の「投稿」とWelcart「新規商品追加」は何が違うのか?
ざっと調べてみたところ、WordPress標準の「投稿」では入力された内容をサーバーに送信するものの画面自体は再描画していません。
一方 Welcart の「新規商品追加」では入力した内容をサーバーに送信し、画面全体を再描画しています。
入力した情報はサーバーに送られデータベースには保存されていますので「公開」ボタン押下時の再描画さえ補ってあげれば何とか使えそう、との判断で新規登録画面が表示される時にカスタムフィールド値を読み込むようにしました。(以下のコードを functions.php に記述)
以下のコードではカスタムフィールドテンプレートの TEMPLATE#0 が適用されている画面を決め打ちしていますので自分の環境に合わせて適時書き換えてください。
例)jQuery(‘#cft_0’).length // TEMPLATE#0 が適用されている時は真
/***********************************************************
* 管理画面に javascript を追加して強制的にカスタムフィールドテンプレートの値を読込
***********************************************************/
add_action('admin_head', 'my_add_admin_js');
function my_add_admin_js(){
/* カスタムフィールドテンプレート値強制読込 ----------------- */
echo <<<__EOF__
<script type="text/javascript">
jQuery(document).ready(function() {
if ( jQuery('#cft_0').length < 1 ) return;
jQuery("#custom_field_template_select").val("0");
jQuery.ajax({
type: 'GET',
url: '?page=custom-field-template/custom-field-template.php&cft_mode=ajaxload&id='+jQuery('#custom_field_template_select').val()+'&post='+jQuery('#post_ID').val(),
success: function(html) {
jQuery('#cft').html(html);
}
});
});
</script>
__EOF__;
}
【WordPress標準の「投稿」にカスタムフィールドを追加したい場合】
追加することは出来ますが welcartの「新規商品追加」でカスタムフィールドを追加している場合はポストタイプが同じなので「新規商品追加」用に追加したカスタムフィールドも表示されてしまいます。
表示されるけど入力しないでね。という訳にもいかないのでブログをカスタム投稿タイプで作成し、標準の「投稿」は使わないようにしました。(「投稿」メニューも非表示に設定)
こうすることでブログの入力/編集については何とか出来たのですが月別アーカイブでハマりました。
長くなるので続きは次の記事で。