yukkiさん、こんにちは。
タイトルとリンクが出力できているのであれば、カスタムフィールドを取得するためのデータは揃っているはずです。
表示しているページの値になってしまっているのは、get_post_metaの第1引数が子ページのIDではなく、表示中のページのIDになってしまっているからでしょう。
おそらくそれを変えるだけで直るものと思います。
問題がなければ、お書きになったコードを見せていただけるとアドバイスしやすいのですが。
jim912さん、こんにちは。
返信ありがとうございます。
コードですが、jim912さんがこちらで書かれていたものを参考にさせて頂きました。
<?php
if ( in_array( $post->ID, array(ID20,ID30,ID40) ) ) {
$child_posts = get_posts( 'numberposts=5&order=ASC&orderby=post_title&post_type=page&post_parent=ID10' );
if ( $child_posts ) {
foreach ( $child_posts as $child ) {
$c_pagelink = get_page_uri( $child->ID );
$c_title = apply_filters( 'the_title', $child->post_title );
$c_example = get_post_meta($post->ID,example, true);
?>
<li><?php echo $c_example; ?><a href="<?php echo $c_pagelink; ?>"><?php echo $c_title; ?></a></li>
<?php
}
}
}
?>
上記の<?php echo $c_example; ?>という箇所に、それぞれの子ページで設定した「キー:example」 の値を表示させたいです。
また、上記コードでは、親ページと子ページのIDをそれぞれ指定して出力しているのだと思いますが、親ページに属する全ての子ページの情報を取得する場合、親ページのIDだけを指定して出力させることはできますでしょうか。ページへの表示数は、numberpostsでコントロールするという感じです。
更にランダム表示もしたいと書いたのですが、get_postsで取得しているのでorderbyでのrand指定はできませんでした。
こちらは色々と難しいのであれば諦めますが、多少の変更で可能であれば併せてお教え頂けると助かります。
もうひとつ(すいません)、確認してみて気づいたのですが、出力されるリンク構造が http://example.com/ID10/ID10/ID20 という風に、親ページ(ID10)が一階層余計に入ってしまいます。
リンク自体は問題なく機能するのですが、修正することは可能でしょうか。
だらだらとわかりにくい説明で大変申し訳ありませんが、何卒宜しくお願い致します。
yukkiさん、こんにちは。
上記の<?php echo $c_example; ?>という箇所に、それぞれの子ページで設定した「キー:example」 の値を表示させたいです。
$c_example = get_post_meta( $child->ID,example, true);
で表示できるはずです。
上記コードでは、親ページと子ページのIDをそれぞれ指定して出力しているのだと思いますが、親ページに属する全ての子ページの情報を取得する場合、親ページのIDだけを指定して出力させることはできますでしょうか。
ID10の子ページのみで表示させたいのであれば、最初の分岐が
if ( $post->post_parent == ID10 ) ) ) {
となります。全ての子ページで自分の親ページに属する子ページのリストを表示させる場合は若干異なりますが。
更にランダム表示もしたいと書いたのですが、get_postsで取得しているのでorderbyでのrand指定はできませんでした。
get_postsは基本的にquery_postsと同じパラメータ指定が可能です。randでも有効になるのではと思いますがダメでしたか?
もうひとつ(すいません)、確認してみて気づいたのですが、出力されるリンク構造が http://example.com/ID10/ID10/ID20 という風に、親ページ(ID10)が一階層余計に入ってしまいます。
リンク自体は問題なく機能するのですが、修正することは可能でしょうか。
これは少々わかりかねますが、wp_list_pagesなどでの出力はID10は1つのみですか?また、ID10を1つ削ってアクセスした場合でもID20のページが表示されますか?
それから、カスタムフィールドのキーがexampleと特定されていますので、get_postsのパラメータにmeta_key=exampleを追加したほうが堅いですね。
jim912さん、こんばんは。
返信ありがとうございました。
以下のコードで同じ親ページに属する子ページのカスタムフィールド取得と、
リストのランダム表示ができるようになりました!
<?php
if ( $post->post_parent == ID10) {
$child_posts = get_posts( 'numberposts=5&order=ASC&orderby=rand&post_type=page&meta_key=example' );
if ( $child_posts ) {
foreach ( $child_posts as $child ) {
$c_pagelink = get_page_uri( $child->ID );
$c_title = apply_filters( 'the_title', $child->post_title );
$c_example = get_post_meta( $child->ID, example, true );
?>
<li><?php echo $c_example; ?><a href="<?php echo $c_pagelink; ?>"><?php echo $c_title; ?></a></li>
<?php
}
}
}
?>
ID10の子ページのみで表示させたいのであれば、最初の分岐が
if ( $post->post_parent == ID10 ) ) ) {
となります。全ての子ページで自分の親ページに属する子ページのリストを表示させる場合は若干異なりますが。
条件分岐で各ページに表示しようと思っていたのですが、もしご面倒でなければ 『全ての子ページで自分の親ページに属する子ページのリストを表示させる』 という方法も教えて頂けないでしょうか。宜しくお願いします。
リンク階層の部分については同じ現象が続いております。
これは少々わかりかねますが、wp_list_pagesなどでの出力はID10は1つのみですか?また、ID10を1つ削ってアクセスした場合でもID20のページが表示されますか?
はい、テンプレートタグで出力している部分は正常に表示されています。
更に確認したのですが、親ID10に属するID20に表示されたID30へのリンクをステータスバーで確認すると、http://example.com/ID10/ID20/ID10/ID30 という階層で表示されます。
ただ、URLをコピペして、間のID10やID20を削ってアクセスしても、正常なURL(http://example.com/ID10/ID30) にきちんとアクセスはできます。
これはいったいなんなのでしょう・・・?
yukkiさん、こんにちは。
『全ての子ページで自分の親ページに属する子ページのリストを表示させる』 という方法も教えて頂けないでしょうか。宜しくお願いします。
下記でいけると思います。
if ( count( $post->ancestors ) == 1 ) {
$child_posts = get_posts( 'numberposts=5&order=ASC&orderby=rand&post_type=page&meta_key=example&post_parent=' . $post->post_parent );
※ 子ページでのみ出力されます。孫ページなどでは実行されません。
リンク階層の部分については同じ現象が続いております。
よく見たら、リンク文字列を生成する関数が違っていました。
get_page_uriではなく、get_page_linkを使わないとだめですね。紛らわしいので見逃してしまっていました。
jim912さん、こんにちは。
丁寧に教えて頂いたお陰で、全て希望通りの動作を確認することができました。
説明が下手で紛らわしい箇所が多々あり申し訳ありませんでした。
症状を詳しく説明するのにも、ある程度の知識がないと苦労しますね。
WordPressの基本的な使い方に関してはある程度わかっていたつもりですが、この機会にもう少し深く勉強してみようと改めて思いました。
この度は最後まで丁寧にご指導頂き、本当にありがとうございました。