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

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

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

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

PHP

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

Q&A

解決済

2回答

3548閲覧

wordpressの管理画面(編集画面)で、プラグインを使わずに固定テンプレートごとにカスタムフィールドを分岐表示させる方法

mtr0326

総合スコア11

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/02/08 17:18

編集2018/02/09 07:30

前提・実現したいこと

wordpressでテンプレートテーマを作成しています。
下の例のように固定ページ編集画面でプラグインを使用せずに、
選択されたデザインテンプレートごとにカスタムフィールドを切り替えて設置・表示させることは可能でしょうか?

例)
固定ページ編集画面にて
デフォルトテンプレート選択時にはカスタムフィールド非表示
デザインテンプレート1を選択したときにカスタムフィールド1を表示

functions.php

// カスタムフィールド1作成 function add_page_fields() { add_meta_box( 'page_setting', '本の情報', 'insert_page_fields', 'page', 'normal'); } add_action('admin_menu', 'add_page_fields'); // カスタムフィールドの入力エリア function insert_page_fields() { global $post; echo '題名: <input type="text" name="page_name" value="'.get_post_meta($post->ID, 'page_name', true).'" size="50" /><br>'; echo '作者: <input type="text" name="page_author" value="'.get_post_meta($post->ID, 'page_author', true).'" size="50" /><br>'; echo '価格: <input type="text" name="page_price" value="'.get_post_meta($post->ID, 'page_price', true).'" size="50" /> <br>'; if( get_post_meta($post->ID,'page_label',true) == "is-on" ) { $page_label_check = "checked"; } echo 'ベストセラーラベル: <input type="checkbox" name="page_label" value="is-on" '.$page_label_check.' ><br>'; } // カスタムフィールドの値を保存 function save_page_fields( $post_id ) { if(!empty($_POST['page_name'])){ update_post_meta($post_id, 'page_name', $_POST['page_name'] ); }else{ delete_post_meta($post_id, 'page_name'); } if(!empty($_POST['page_author'])){ update_post_meta($post_id, 'page_author', $_POST['page_author'] ); }else{ delete_post_meta($post_id, 'page_author'); } if(!empty($_POST['page_price'])){ update_post_meta($post_id, 'page_price', $_POST['page_price'] ); }else{ delete_post_meta($post_id, 'page_price'); } if(!empty($_POST['page_label'])){ update_post_meta($post_id, 'page_label', $_POST['page_label'] ); }else{ delete_post_meta($post_id, 'page_label'); } } add_action('save_post', 'save_page_fields');

試したこと

add_meta_box( 'page_setting', '本の情報', 'insert_page_fields', 'page', 'normal');

上記コード3行目add_meta_boxの第4引数にデザインテンプレートのパス(page/template1.php)なども記載してみましたがダメでした。

補足情報(FW/ツールのバージョンなど)

WordPress 4.9.4

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

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

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

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

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

guest

回答2

0

ベストアンサー

固定ページにカスタムフィールドを設置して、どのテンプレートが選択されたかをjavascriptで取得して、そのカスタムフィールドを表示・非表示させればどうでしょうか。

たとえば、固定ページに設置したカスタムフィールドのHTMLが以下のようだとして、

html

1<div id="page_setting"> 2//カスタムフィールド 3</div> 4

選択したテンプレートのselectのIDが「page_template」、valueが「front-page.php」だとします。

functions.phpに以下のコードを追加して

function testdayo() { if( get_post_type() == 'page' ) { echo '<script type="text/javascript"> $(document).ready(function() { $("div#page_setting").hide(); $("#page_template").bind("change", function() { var temp = $("#page_template").val(); if( temp == "front-page.php") { $("div#page_setting").show(); } else { $("div#page_setting").hide(); } }); }); </script>'; }} add_action( 'admin_footer', 'testdayo' );

参考まで。

追記

function testdayo() { if( get_post_type() == 'page' ) { echo '<script type="text/javascript"> $(document).ready(function() { //ここから変更 var temp = $("#page_template").val(); if( temp == "front-page.php") { $("div#page_setting").show(); } else { $("div#page_setting").hide(); } //ここまで変更 $("#page_template").bind("change", function() { var temp = $("#page_template").val(); if( temp == "front-page.php") { $("div#page_setting").show(); } else { $("div#page_setting").hide(); } }); }); </script>'; }} add_action( 'admin_footer', 'testdayo' );

すいませんでした。
最初のコードでは、ページを読み込んだ時点ではカスタムフィールドを隠す設定になっていたので、公開した後の読み込みでも隠れてしまったようです。
なので、テンプレートの状態を判定させる処理を付け加えました。
ただ、わたしはjavascriptについて門外漢なので、違ったコードのほうがいいかもしれません。

投稿2018/02/11 02:08

編集2018/02/12 11:12
8-0_nyan5

総合スコア2352

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

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

mtr0326

2018/02/12 06:53

無事にいけました! ありがとうございます!
mtr0326

2018/02/12 07:06

ちなみに固定ページ管理画面でカスタムフィールドに値を入力後更新ボタンを押すと、カスタムフィールドが非表示になるのですが、もし解決法があれば教えてください。
mtr0326

2018/02/12 16:54

なるほど。 valueの値を読み込んで条件分岐させているんですね..大変勉強になりました。 ありがとうございました!
guest

0

管理画面の話ですね。
「Custom Field Template」のプラグインを入れることで、解決するかもしれません。
このテンプレートを使用していれば、という判定も設定できます。

https://techacademy.jp/magazine/4139

投稿2018/02/09 03:21

kszk311

総合スコア3404

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

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

kszk311

2018/02/09 03:25

ちなみに、出力時の話かと思ってしまったので、 タイトルを「wordpressの管理画面(編集画面)で、〜」に変えておいたほうが、後から気になって調べる方にも分かりやすいような気がします。
mtr0326

2018/02/09 07:38

さっそくのご回答・ご指摘ありがとうございました。 Custom Field Templateを使用せずコードのみで実装できる方法を探していましたので、質問を編集させていただきました。
kszk311

2018/02/09 07:43

では、ソース側で行ったことはないので分かりません、力になれずすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問