momonutsさん、こんにちは。
カスタムフィールドは
[adr]
のようにconf.iniに定義しているのでしょうか?
だとすれば
$adr = esc_html(get_post_meta($post->ID, adr, true));
ではなく
$adr = esc_html( get_post_meta( $post->ID, ‘adr’, true ) );
だと思うのですがどうでしょうか?正しくはadrではなく’adr’と文字列で指定する気がします。
変数$adrに先ず何が入っているのか確認してみませんか?
変数の値を確認する関数としてvar_dump()というものがあります。
var_dump( $adr );
Tsuyoshi さま
ありがとうございます。
var_dump()を入れると「NULL」と出ます・・・
上記アドバイス通り、その部分は’’で囲んだとしたら
その下の
echo do_shortcode(‘[map address=”‘.$adr.'”〜の
“‘.$adr.'”の部分はどの様に記述すれば良いのでしょうか?
質問ばかりですみません・・・
Google Maps v3 Shortcodeは、自分も使ったことはないのですが
var_dump()を入れると「NULL」ということは、先ずカスタムフィールドの値が取得できていないということです。
なので焦らず1つずつ進めて行きましょう。
先ず第一にカスタムフィールドの値を取得出来るようにする。
var_dump()でちゃんと値が入っているか確認してみて下さい。
そしてそれでも地図が表示されていなければショートコード出力のところも見直しましょう。
’’で囲って
var_dump( $adr );
とした場合でもNULLになるでしょうか?
はい。。。NULLしか出力されません。
色々試したのですが未だ表示されずです泣
// その際、データのサニタイズもしておく
// do_shortcodeでマップ出力。その際addressには変数「adr」の値を入れる
この部分を私がきちんと理解出来ていない気がします・・・
カスタムフィールドの出力は以下のようになるかと思います。
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php echo esc_html( get_post_meta( get_the_ID(), 'カスタムフィールドのキー', true ) ); ?>
<?php endwhile; ?>
<?php endif; ?>
その際のCustom Field Gui Utilityのconf.iniの内容はあくまで例ですが、こんな感じですかね。
[カスタムフィールドのキー]
fieldname = 地図
type = textfield
class = 投稿タイプ
size = 80
カスタムフィールドのキーの部分は、今回で言えば「adr」を、投稿タイプの部分には「post」「page」またはカスタム投稿タイプの post_type を指定します。
先ずは以下を参考に、カスタムフィールドの出力が行えるところまで頑張ってみてください。
Custom Field GUI Utility 3.2 – WordPress プラグイン
また、Codexも参考にしてみて下さい。
関数リファレンス/get post meta – WordPress Codex 日本語版
やっぱり何度やってもうまく行きません・・・
Custom Field Gui Utilityのconf.ini内に
[address]
fieldname = 住所
type = textfield
class = schedule
size = 35
と設定しているカスタムフィールドの値を反映させて地図を表示させたいので
<?php
if (function_exists(‘mapme’)) {
$adr = esc_html(get_post_meta($post->ID, address, true));
echo do_shortcode(‘[map address=”‘.$address.'” marker=”yes” w=”425″ h=”350″ z=”15″]’);
}
?>
としてみたのですが、そもそも解釈が間違えておりますでしょうか?
いきなり全部をやろうとしないで下さい。
ショートコードの部分が間違ってるかはわかりませんが、少なくとも今上手く行っていない第一の原因はカスタムフィールドの値が取ってこれていないためです。
ですので、先ずは地図の表示は考えずにカスタムフィールドの値を表示だけする、ということを1ステップと考えましょうと言ったのです。
esc_html(get_post_meta($post->ID, address, true));
後ここ間違ってます。addressではなく‘address’です。
ちなみに聞きますがscheduleはカスタム投稿タイプですか?固定ページなら投稿タイプがpageとなりますが、投稿画面には住所という入力欄があり、データは入力されている状態ですよね?
先ずNULLで返ってくること自体おかしい気がするので、テスト環境であればデバッグモードをオンにしてみて下さい。
以下気になる点です。
1. conf.iniの設定が間違っていないか(正しければ2が表示される筈です)
2. 投稿画面にカスタムフィールドの入力欄が表示されているか。
3. カスタムフィールドの値を入力しているか
4. 投稿データを取得するループ処理が書かれているか(以下に例を記します)
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php echo esc_html( get_post_meta( get_the_ID(), 'address', true ) ); ?>
<?php endwhile; ?>
<?php endif; ?>
以上を踏まえてカスタムフィールドの値を表示できるかをお試し下さい。
ここが出来ないことにはその次には進めないので、地図の表示は一度忘れて下さい。
Custom Field GUI Utility及びカスタムフィールドの使い方をもう一度調べなおして見ることをお勧めします。
後もしかしたらですが、バージョンがあってないこともありうるかも知れませんので、WordPressやプラグインのバージョンを確認するということと、フォーラムの投稿時にも提示したほうが良いとおもいますよ。
フォーラム » 【重要】 お読みください » 問題解決のためのチェックリスト
すみません・・・根気づよくお付き合い下さり感謝いたします。
esc_html(get_post_meta($post->ID, ‘address’, true));
としても結果は変わりませんでした。
「schedule」はカスタム投稿タイプです。
ちなみに、住所だけを表示させる事は可能です。
<?php echo post_custom(‘address’); ?>
とすると、きちんと住所が表示されます。
気になる点としてあげていただいた部分ですが
1.2が表示されるので間違ってはいないと思います。
2.正しく表示されています
3.カスタムフィールドの値(Custom Field Gui Utilityのconf.ini内[]内の文字列)を入力しています
4.こちらに関しては
<?php
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
$wp_query = new WP_Query( array( ‘post_type’ => ‘schedule’, ‘posts_per_page’ => 1, ‘paged’ => $paged ) ); ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
と指定してあります。
WPのversionは3.4.2でCustom Field Gui Utilityのversionは3.2.7の最新版です。
3.4でも使えるだろうとは記載されておりました。
今から提示するパターンで表示されるか試してみて下さい(書き換えずにコピーして下さい)。
<?php echo esc_html( get_post_meta( get_the_ID(), ‘address’, true ) ); ?>
<?php echo esc_html( post_custom( ‘address’ ) ); ?>
get_post_metaの場合は、$post->IDが取得できてないだけかなと思います。
var_dump( $post->ID );
では値はどうなっていますか?
また、$post->IDをget_the_ID()に書き換えてみてはどうでしょうか。
post_customで値が出力されるなら以下で変数$adrに値が入ると思いますよ。
<?php $adr = esc_html( post_custom( ‘address’ ) ); ?>
先ほどはwpやプラグインのversionを記載せず質問した私の無礼をご指摘下さりありがとうございます。お詫びとお礼が遅くなり申し訳ございません。
以後気をつけます!
ご提示下さった2パターンとも表示されましたので、コードを変更し
<?php
if (function_exists(‘mapme’)) {
$カスタムフィールドの値 = esc_html( post_custom( ‘カスタムフィールドの値’ ));
echo do_shortcode(‘[map address=”‘.$カスタムフィールドの値.'” marker=”yes” w=”値” h=”値” z=”値”]’);
}
?>
とした所、無事地図が表示される様になりました!
無知な私に長々とお付き合い下さり本当にありがとうございます!!!
本当に感謝です!
フォーラムに掲載されてるコードは必ず動作が保証されている訳ではなく、あくまで方法のアドバイスや例だったりすることもあります。
ですので、デバッグモードを有効にしてコードを検証したり、順を追ってどういう値が入っているか見ていくと次からの問題解決に役立つと思います。
解決されたとのことで良かったです。このレスは解決済みにして頂きますよう、宜しくお願いします。
そうですよね、掲載されているコードを基に自分の環境に合ったものにしていかなければなりませんよね。
今回は本当に色々勉強になりました。
初めての投稿だったので何も分からず(解決したのに解決済みにする事すら見落とし・・・)色々ご迷惑をおかけいたしました・・・
本当に色々とありがとうございました!!