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

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

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

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

PHP

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

Q&A

解決済

1回答

1805閲覧

カスタム投稿タイプ+カスタムフィールドの内容をショートコードに入れて固定ページで表示させたい

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/10/16 07:47

編集2018/10/17 05:00

前提・実現したいこと

Wordpressでホームページを制作しています。
プラグインを極力使用したくないため、ショートコードを自作しその中でプログラムを動かして固定ページへ表示させたいと思っています。

標題にすべて書いてしまいましたがやりたいこととしましては、

1.カスタム投稿タイプ+カスタムフィールド(advanced custom fields)で入力
2.1.の内容を別のPHPファイルとして作成し、ショートコードとして設定
3.2.を固定ページに入れて表示(2.はどこででも使用できるようにしたい)

分かりにくい内容で申し訳ありませんが、ご教示の程よろしくお願いいたします。

** (2018/10/17 14:00 ソースコードを修正しました) **

該当のソースコード

php

1//function.php 2function my_php_Include($params = array()) { 3 extract(shortcode_atts(array('file' => 'default'), $params)); 4 ob_start(); 5 include(STYLESHEETPATH . "/$file.php"); 6 return ob_get_clean(); 7} 8add_shortcode('hoge', 'my_php_Include');

php

1//hoge.php 2 <?php 3 $hogeargs = array( 4 'posts_per_page' => 4, 5 'offset' => 0, 6 'orderby' => 'post_date', 7 'order' => 'DESC', 8 'post_type' => 'hogehoge', 9 'post_status' => 'publish', 10 'suppress_filters' => true, 11 'ignore_sticky_posts' => true, 12 'no_found_rows' => true 13 ); 14 $hogePosts = get_posts($hogeargs); 15 if($hogePosts): ?> 16 <?php if($hogePosts) : foreach($hogePosts as $post) : setup_postdata( $post ); ?> 17 <?php 18 //データ取得(Advanced custom field) 19 $data_a = get_field('data_a'); 20 $data_b = get_field('data_b'); 21 $data_c = get_field('data_c'); 22 $data_d = get_field('data_d'); 23 $data_e = get_field('data_e'); 24 $data_f = get_field('data_f'); 25 ?> 26 <img src="<?php $data_a; ?>"> 27 <?php the_title(); ?> //タイトルは出ますが「ショートコードを設置した固定ページのタイトル」が出る 28 <p> 29 <?php if($data_b === 'aa'){ 30 echo '◯'; 31 } elseif($data_b === 'bb'){ 32 echo '●'; 33 } ?> 34<?php echo $data_c; ?></p> 35 <?php 36 if(!empty($data_d)){ 37 if( in_array( 'cc', $data_d ) ) { 38 echo '□'; 39 } 40 if( in_array( 'dd', $data_d ) ) { 41 echo '■'; 42 } 43 } ?> 44 <p><?php echo $data_e; ?></p> 45 <p><?php echo $data_f; ?></p> 46 <?php endforeach; ?> 47 <?php endif; ?> 48 <?php endif; ?>

html

1[hoge file='hoge']

試したこと

・ショートコードの中身(ただのテキスト)を表示させるところまではできました。
ただ、肝心の入力した値を取得したり表示がうまくいきません。

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

・Wordpress 4.9.8
・Advanced Custom Fields PRO
・Custom Post Type UI

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

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

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

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

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

CHERRY

2018/10/16 21:30 編集

include をやめて、hoge.php の内容を直接記載したらどうなりますか?
退会済みユーザー

退会済みユーザー

2018/10/16 23:58

CHERRYさんありがとうございます。hoge.phpの内容はpage.phpに直接、ということでよろしいでしょうか。
CHERRY

2018/10/17 00:38

そうです。 include 分の代わりに hoge.php の中身を直接記載すると動作するのであれば、問題点は、ファイルのパスが間違っているだけということになります。
退会済みユーザー

退会済みユーザー

2018/10/17 04:41

重ね重ねありがとうございます。調べたところそもそもカスタムフィールドの値が取れておらず、とりあえず別のテンプレートファイルとして作成してpage.phpに<?php get_template_part('hoge'); ?>で読み込ませたところ、フィールドの値までは表示できました。ただその内容をショートコード化させると、エラーは出なくなりましたが今度はその固定ページのタイトルが表示されてしまいました。投稿タイプが認識できていないようです。
guest

回答1

0

ベストアンサー

自己解決しました。

php

1//データ取得(Advanced custom field) 2$post_id = $post->ID;//IDの設定抜け 3$data_a = get_field('data_a',$post_id); 4//以降のfieldの変数全てに$post_idを指定

原因としては

・投稿IDの指定をしていなかった
・IDの指定がなかったために各フィールドの値が取れていなかった

基本的なところができておらず恥ずかしい限りですが、無事進めることができそうです。
ご協力いただきましたCHERRYさんには重ねてお礼申し上げます。ありがとうございました。

投稿2018/10/17 07:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問