実現したいこと
- index.phpに直書きされた『phpを含むコード』をCode Snippetsプラグインなどを介して固定ページにそのまま移植し、フロントページとして使えるようにしたい。
前提
外部から引き継いだWordPressを使用しています。
トップページがテーマファイルのindex.phpに直書きされており容易な編集ができないため、該当のコード部分をプラグイン「WPCode Lite」でショートコード化し、フロントページとして使う予定の固定ページ「home」にショートコードを貼り付けたのですが、index.php直書き時には想定通りに動作するコードが、固定ページではうまく動作しません。
発生している問題
特定のカテゴリーの投稿一覧を出力するコード内の以下の値を表示する関数
- アイキャッチ画像のURL
- 投稿タイトル
- 投稿日時
- 投稿本文
のうち、「投稿本文」を除くすべての関数が、特定カテゴリー一覧からではなく固定ページ「home」自体の値を返します。
- アイキャッチ画像のURLは、画像が見つからなかった場合のダミー画像が表示されます。
- index.phpに直書きされたコードは、どの関数も問題なく特定カテゴリー一覧からの値を返します。
該当のソースコード
php
1<?php 2// 条件:カテゴリースラッグ「voice」の記事を日付降順で6件取得 3$args = [ 4 'category_name' => 'voice', 5 'numberposts' => 6, 6 'orderby' => 'date', 7 'order' => 'DSC' 8]; 9?> 10 11<ul id="voice"> 12 13<?php 14// 条件を渡して記事を取得 15$custom_posts = get_posts($args); 16 17foreach ( $custom_posts as $post ): setup_postdata($post); ?> 18 <li><img src="<?php echo catch_that_image(); ?>" /><dl><dt class="sub-tit2 orange"><?php the_title(); ?></dt><dd class="date mb1em"><?php the_time('Y/m/d') ?></dd><dd><?php echo strip_shortcodes( wp_strip_all_tags( get_the_content() ) ); ?></dd></dl></li> 19<?php endforeach; ?> 20 21</ul>
試したこと
get_the_content()
のみ特定カテゴリーの投稿一覧からの値を返しているので、
<?php the_title(); ?>
を <?php echo get_the_title(); ?>
に、
<?php the_time('Y/m/d') ?>
を <?php echo get_the_time('Y/m/d') ?>
に
書き換えてみましたが、結果は変わらず、ショートコードを貼った固定ページ「home」の値が返されました。
また、上記phpコードの16行目に global $post;
を追記したところ、指定したカテゴリー一覧から値を取得・表示できるよう(本来の動作)に戻ったのですが、
グローバル変数は使わないに越したことはない
という情報も目にしましたので、コードを増やさず記述の見直しか何かで本来の動作にできるようでしたらそのようにしたいと考えています。
補足情報(FW/ツールのバージョンなど)
WordPressのバージョン: 6.0.3
WPCode Liteのバージョン: 2.0.4.4
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2023/04/08 09:27 編集
2023/04/08 12:51
2023/04/08 23:30