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

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

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

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

PHP

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

Q&A

解決済

2回答

749閲覧

phpが表示するカスタムフィールドのデータが重複します。

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

PHP

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

0グッド

0クリップ

投稿2017/08/23 09:13

編集2017/08/24 14:41

###現状
カスタム投稿に次のようなケーキの投稿があります。
イメージ説明

###これがやりたい
今回やりたいのは『カスタム投稿のカスタムフィールドを一覧する固定ページを作りたい』ということです。
イメージ説明

###困っています
困っていることは、『カスタムフィールドのデータが重複する』ことです!!
イメージ説明

###この書き方ではなぜダメなのか?
最初の画像にあります[phpinclude file='cake']で呼び出すcake.phpは下記のように書いてあります。
ターム(tarmberryとtarmchoco)と、arciveページで条件分岐させています。
cake.php

php

1<?php if(is_tax('cat', 'tarmberry') || has_term('tarmberry','cat')): ?> 2<?php 3global $post; 4$Tokuchou = get_post_meta(100,'field_cake'); 5?> 6 7<?php elseif(is_tax('cat', 'tarmchoco') || has_term('tarmchoco','cat')): ?> 8<?php 9global $post; 10$Tokuchou = get_post_meta(101,'field_cake'); 11?> 12 13<?php elseif (is_archive()): ?> 14<?php 15global $post; 16$Tokuchou = get_post_meta($post->ID,'field_cake'); 17?> 18<?php endif; ?> 19 20<!-- ケーキのデータ --> 21<div class="cake_name">ケーキ</div> 22<div class="cake_area"> 23<ul class="cake_ul"> 24 <?php if(in_array("berry",$Tokuchou)):?> 25 <li> 26 いちごケーキ<br> 27 <img src="https://example.com/wp-content/uploads/2017/07/berry.png" alt="いちごケーキ"> 28 </li> 29 <?php endif;?> 30 <?php if(in_array("choco",$Tokuchou)):?> 31 <li> 32 チョコケーキ<br> 33 <img src="https://example.com/wp-content/uploads/2017/07/choko.png" alt="チョコケーキ"> 34 </li> 35 <?php endif;?> 36</ul> 37</div> 38<!-- ケーキのデータここまで -->

次は固定ページです。[phpinclude file='menu']で呼び出すmenu.phpは下記のように書いてあります。
menu.php

php

1<?php if(is_tax('cat', 'tarmberry') || has_term('tarmberry','cat')): ?> 2<h2 class="title"><?php echo get_the_term_list(100,'cat'); ?></h2> 3<div class="col"> 4 <?php get_template_part( 'cake' ); ?> 5</div> 6<?php endif; ?> 7 8<?php if(is_tax('cat', 'tarmchoco') || has_term('tarmchoco','cat')): ?> 9<h2 class="title"><?php echo get_the_term_list(101,'cat'); ?></h2> 10<div class="col"> 11 <?php get_template_part( 'cake' ); ?> 12</div> 13<?php endif; ?>

###質問です
長くなってしまいすみません。
なぜ上記のmenu.phpではいちごケーキが重複してしまうのか?
ご指摘頂ければ幸いです。

phpが初期化されてないからかな、などと思い、あちこちに

<?php $Tokuchou = array(); ?>

などを加えてみましたが、

ダメでした。

いちごケーキだけが表示されたり、チョコケーキだけが表示されたり、はたまた何も表示されなかったりします。。

初期化の方法がダメなのでしょうか?
それとも別の原因なのでしょうか?

どなたか、どうか助けてくださいませ。
宜しくお願い致します!( ノД`)シクシク…

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

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

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

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

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

aro10

2017/08/23 09:44

どのようなデータを与えて最終的にどの表示になればいいかの詳細と、get_post_metaでどのようなデータが代入されるかを追記するとより回答を得やすいかと思います。
退会済みユーザー

退会済みユーザー

2017/08/23 10:36

ご指摘ありがとうございます。いろいろ加筆してみました。尚、get_post_metaでは投稿ページのカスタムフィールドをとってきてほしいと思っております。
kei344

2017/08/23 17:08

カスタムフィールドを使う内容ではないと思いますが、ひとまずサイト全体の構成を提示されてはいかがでしょう。
退会済みユーザー

退会済みユーザー

2017/08/24 14:39

aro10さま、とりあえず解決しました。ご指摘ありがとうございます。kei334さま、いつもありがとうございます。
guest

回答2

0

図だけで思考しましたが、固定ページにタームに
tarmberryとtarmchocoが入ってるって言うことは

cake.phpの

PHP

1<?php if(is_tax('cat', 'tarmberry') || has_term('tarmberry','cat')): ?> 2<?php 3global $post; 4$Tokuchou = get_post_meta(100,'field_cake'); 5?>

こっちが毎回処理されてIDが100のものが2回(いちごが2回)出て正解だと思いますが、いかがでしょう。

投稿2017/08/23 10:30

編集2017/08/23 11:26
rururu3

総合スコア5545

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

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

退会済みユーザー

退会済みユーザー

2017/08/23 12:41 編集

ありがとうございます。 一理ありますね!! でも、そうすると <?php if(is_tax('cat', 'tarmberry') || has_term('tarmberry','cat')): ?> <?php global $post; $Tokuchou = get_post_meta(100,'field_cake'); ?> とか <?php elseif(is_tax('cat', 'tarmchoco') || has_term('tarmchoco','cat')): ?> <?php global $post; $Tokuchou = get_post_meta(101,'field_cake'); ?> を読み込まななくなってしまうんですよね。(´;ω;`) かといって、上の条件分岐に次のように固定ページを加えると、 <?php if(is_tax('exchange', 'bitflyer') || has_term('bitflyer','exchange') || is_page('1111')): ?> やっぱりタームがついていたときと同様に「いちごケーキ」だけが表示されるのです。 参っちゃいますね。
rururu3

2017/08/23 15:43

思ったんですが、elseifとかにせずに $Tokuchou = get_post_meta(100,'field_cake'); で配列で返ってくるのを利用して $Tokuchou = array_merge(get_post_meta(100,'field_cake'), $Tokuchou); にしちゃうとかどうでしょう。 ※$Tokuchou = []; を最初にするのを忘れずに
退会済みユーザー

退会済みユーザー

2017/08/23 16:54

たびたびありがとうございます!! 実は(というかあからさまですが笑)かなりの初心者でして、仰るところがよく掴めません。(;'∀') $Tokuchou = get_post_meta(100,'field_cake'); で配列で返ってくるのを利用して $Tokuchou = array_merge(get_post_meta(100,'field_cake'), $Tokuchou); にしちゃう この部分ですけれど、私が書いた部分のどこからどこを、どのように書き換えればいいか、、も、もう一声頂けませんでしょうかっ?! 配列で返る、それを利用する、$Tokuchou = [];を最初にする、など、なかなか難易度の高い(?)言葉が飛び交っておりまして…(?_?) お手すきの折によろしくお願い致します。<(_ _)>
退会済みユーザー

退会済みユーザー

2017/08/23 16:59

ごめんなさい!失礼いたしました。やる前から聞いておりました。まずはあれこれ、、やってみます!!夜分お疲れのところすみませんでした<(_ _)>
rururu3

2017/08/23 17:18 編集

<?php $Tokuchou = []; ?> <?php if(is_tax('cat', 'tarmberry') || has_term('tarmberry','cat')): ?> <?php global $post; $Tokuchou = array_merge(get_post_meta(100,'field_cake'), $Tokuchou); ?> <?php elseif(is_tax('cat', 'tarmchoco') || has_term('tarmchoco','cat')): ?> <?php global $post; $Tokuchou = array_merge(get_post_meta(101,'field_cake'), $Tokuchou); ?> <?php elseif (is_archive()): ?> <?php global $post; $Tokuchou = array_merge(get_post_meta($post->ID,'field_cake'), $Tokuchou); ?> <?php endif; ?> <div class="cake_name">ケーキ</div> <div class="cake_area"> <ul class="cake_ul"> <?php if(in_array("berry",$Tokuchou)):?> <li> いちごケーキ<br> <img src="https://example.com/wp-content/uploads/2017/07/berry.png" alt="いちごケーキ"> </li> <?php endif;?> <?php if(in_array("choco",$Tokuchou)):?> <li> チョコケーキ<br> <img src="https://example.com/wp-content/uploads/2017/07/choko.png" alt="チョコケーキ"> </li> <?php endif;?> </ul> </div> こんな感じですね
rururu3

2017/08/23 17:25

あとwordpressでのphpのお作法をよく知らないのですが、<?php ?>ってまとめれる気がするのですが <?php global $post; $Tokuchou = []; if(is_tax('cat', 'tarmberry') || has_term('tarmberry','cat')) { $Tokuchou = array_merge(get_post_meta(100,'field_cake'), $Tokuchou); } if(is_tax('cat', 'tarmchoco') || has_term('tarmchoco','cat')) { $Tokuchou = array_merge(get_post_meta(101,'field_cake'), $Tokuchou); } if (is_archive()) { $Tokuchou = array_merge(get_post_meta($post->ID,'field_cake'), $Tokuchou); } ?> <div class="cake_name">ケーキ</div> <div class="cake_area"> <ul class="cake_ul"> <?php if(in_array("berry",$Tokuchou)):?> <li> いちごケーキ<br> <img src="https://example.com/wp-content/uploads/2017/07/berry.png" alt="いちごケーキ"> </li> <?php endif;?> <?php if(in_array("choco",$Tokuchou)):?> <li> チョコケーキ<br> <img src="https://example.com/wp-content/uploads/2017/07/choko.png" alt="チョコケーキ"> </li> <?php endif;?> </ul> </div> こんな感じにまとめれるのかな・・・
退会済みユーザー

退会済みユーザー

2017/08/23 17:45

ありがとうございます。 言葉を検索しても意味不明すぎて途方にくれておりました。笑 ただ、やはりいちごケーキだけが連続してしまうようです。 せっかく書いて頂いたのになんだか申し訳ございません。。
rururu3

2017/08/23 17:58

<?phpタグを減らしたので確認されましたか? 2個前のものではelseifにしてしまってるので、間違っております。 まとめたものでやられたならば、print_rを利用して変数$Tokuchouの値確認してもらいたいです
退会済みユーザー

退会済みユーザー

2017/08/23 18:16 編集

はい、1番目の方はいちごケーキが2つ出力され、2番目の方はケーキが何も表示されず、でした。 たびたびありがとうざいます! こちらでしょうか? <?php $info = print_r($Tokuchou, TRUE); echo $info; ?> これを書いた場所に Array ( ) と出力されましたね。どこから湧いてきたのでしょうねこれ?? どこにも書いていないですけれど… 相変わらずケーキは何も表示されず、です。 あ、どうやらこれは「$Tokuchouに値が何も入ってないぞ」というお知らせなのですね。 ええーー!!なんでやー笑
rururu3

2017/08/23 18:15

Array ( )・・・って出てるのでしたら、$Tokuchouには何も入ってないことになります。 もしかして、記述されてる場所が適切でないかもしれないので(から配列ならそもそもif(in_array("berry",$Tokuchou))でTRUE判定されないのでイチゴケーキすら出ないはずなので) <?php if(in_array("berry",$Tokuchou)):?> の直前に <?php $info = print_r($Tokuchou, TRUE); echo $info; ?> を書いて値確認してほしいですー
退会済みユーザー

退会済みユーザー

2017/08/23 18:21

コメント修正すれ違い、失礼致しました! はい、仰るようにイチゴケーキも表示なしでした。 そして直前に書いてみると、同じく、 Array ( ) でしたね。。
rururu3

2017/08/23 18:24

となると、 get_post_meta(100,'field_cake') や get_post_meta(101,'field_cake') と get_post_meta($post->ID,'field_cake') もprint_rでどんな値が来てるかチェックしていくといいですね
退会済みユーザー

退会済みユーザー

2017/08/23 18:48 編集

お、値が入っているときはこのように表示されるのですね。 次のような感じでした。 ・・・ <?php $info = print_r($Tokuchou, TRUE); echo $info; ?> Array ( ) ・・・ <?php $info = print_r(get_post_meta(100,'field_cake'), TRUE); echo $info; ?> Array ( [0] => berry [1] => choco ) ・・・ <?php $info = print_r(get_post_meta(101,'field_cake'), TRUE); echo $info; ?> Array ( [0] => berry [1] => choco ) ・・・ <?php $info = print_r(get_post_meta($post->ID,'field_cake'), TRUE); echo $info; ?> Array ( ) ・・・ やはり100と101で同じ値が出力されてしまいますね。 そして。 ・phpの省略版だと →結局Array ( )となってケーキが何も表示されず。 ・省略しない版だと →同じ値のままいちごケーキが2つ出力される。 という感じのようすです。
rururu3

2017/08/23 19:25

省略版だめっぽいので <?php $Tokuchou = []; ?> <?php if(is_tax('cat', 'tarmberry') || has_term('tarmberry','cat')): ?> <?php global $post; $Tokuchou = array_merge(get_post_meta(100,'field_cake'), $Tokuchou); ?> <?php endif; ?> <?php if(is_tax('cat', 'tarmchoco') || has_term('tarmchoco','cat')): ?> <?php global $post; $Tokuchou = array_merge(get_post_meta(101,'field_cake'), $Tokuchou); ?> <?php endif; ?> <?php if (is_archive()): ?> <?php global $post; $Tokuchou = array_merge(get_post_meta($post->ID,'field_cake'), $Tokuchou); ?> <?php endif; ?> <div class="cake_name">ケーキ</div> <div class="cake_area"> <ul class="cake_ul"> <?php if(in_array("berry",$Tokuchou)):?> <li> いちごケーキ<br> <img src="https://example.com/wp-content/uploads/2017/07/berry.png" alt="いちごケーキ"> </li> <?php endif;?> <?php if(in_array("choco",$Tokuchou)):?> <li> チョコケーキ<br> <img src="https://example.com/wp-content/uploads/2017/07/choko.png" alt="チョコケーキ"> </li> <?php endif;?> </ul> </div> phpの省略版だとお作法的にだめ?っぽいので省略しない版でelseifをやめたのではどうでしょう (明日起きた際にまた考えますー
退会済みユーザー

退会済みユーザー

2017/08/24 06:08

こんにちは。暑くていやんなっちゃいますね。。 ご提示いただいた非省略のif版は、ダブルいちごケーキでフィニッシュでした。笑
rururu3

2017/08/24 07:53

嫌になっちゃいますよねw すいません、根本的なことを聞くの忘れてました。 /var/log/httpd/error_logにエラー表示とかされてませんか? (tail -n 100 /var/log/httpd/error_log)
退会済みユーザー

退会済みユーザー

2017/08/24 14:12

できた!!できましたよぉぉ~!!!!!!←号泣w 親身になってお付き合いいただき、本当にありがとうございます。 ビットコインアドレスお持ちでしたら500円分お送りさせてください。 明日も暑いそうなのでエアコン代として。笑 【STEP1】 まずはcake.phpをこうしてケーキをデータをここに入れておきまして、 <?php if (!isset($class_cake_all)){ $class_cake_all = 'cake_all'; } ?> <?php if (is_archive() || get_post_type() === 'cakepost'): ?> <?php global $post; $Tokuchou = get_post_meta($post->ID,'field_cake'); ?> <?php endif; ?> <?php if ($class_cake_all == 'cake_all'): ?> <span class="cake_all"> ケーキのデータをここに入れました </span><?php endif; ?> 【STEP2】 メニューはこうして呼び出しました。 <div class="col"> <?php global $post; $Tokuchou = get_post_meta(100,'field_cake'); ?> <?php $class_cake_all = 'cake_all'; include(dirname(__FILE__) . "/../cake.php"); ?> </div>
退会済みユーザー

退会済みユーザー

2017/08/24 14:15

ちょーうれしーーー☆☆☆ ↑ (喜びおすそ分け笑)
rururu3

2017/08/24 14:40

おお!おめでとうございます! 私もwordpressのphpちょい難癖あるってわかったので、勉強になりました。 これからも開発などなどがんばってくださいー
guest

0

ベストアンサー

変則的ですが解決いたしました。同じ疑問にぶつかった方にお役に立てるかわかりませんけれど、以下に解決方法を記載いたします。

ご意見頂戴したみなさま、特にrururu3さま、誠にありがとうございます。

cake.php

php

1<?php 2if (!isset($class_cake_all)){ 3$class_cake_all = 'cake_all'; 4} 5?> 6 7<?php if (is_archive() || get_post_type() === 'cakepost'): ?> 8<?php 9global $post; 10$Tokuchou = get_post_meta($post->ID,'field_cake'); 11?> 12<?php endif; ?> 13 14<?php if ($class_cake_all == 'cake_all'): ?> 15<span class="cake_all"> 16<!-- ケーキのデータ --> 17</span><?php endif; ?>

menu.php

php

1<?php if(is_tax('cat', 'tarmberry') || has_term('tarmberry','cat')): ?> 2<h2 class="title"><?php echo get_the_term_list(100,'cat'); ?></h2> 3<div class="col"> 4<?php 5global $post; 6$Tokuchou = get_post_meta(100,'field_cake'); 7?> 8<?php $class_cake_all = 'cake_all'; include(dirname(__FILE__) . "/../cake.php"); ?> 9</div> 10<?php endif; ?> 11 12<?php if(is_tax('cat', 'tarmchoco') || has_term('tarmchoco','cat')): ?> 13<h2 class="title"><?php echo get_the_term_list(101,'cat'); ?></h2> 14<div class="col"> 15<?php 16global $post; 17$Tokuchou = get_post_meta(101,'field_cake'); 18?> 19<?php $class_cake_all = 'cake_all'; include(dirname(__FILE__) . "/../cake.php"); ?> 20</div> 21<?php endif; ?>

投稿2017/08/24 14:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問