前提・実現したいこと
ワードプレスのショートコードの引数をループの処理に使って特定のカテゴリや新着記事等を出力させたいです。
発生している問題・理解できていないこと
該当のソースコードをみていただければ早いかと思いますが、
print_number()の関数内で作成した変数を関数外で使用することができれば問題は解決すると思っているのですが、
global宣言しても解決できず。。
どこに問題があるのかわからずご質問しました。
該当のソースコード
categoryphp
1<?php 2 // 未定義の関数を初期化 3 $title = null; 4 $number = null; 5 $category = null; 6 7 // ショートコードの引数を設定して変数に代入→配列で出力 8 function print_number($atts){ 9 $atts = shortcode_atts(array( 10 "title" => タイトル, 11 "number" => 5, 12 "category" => カテゴリ名 13 ),$atts); 14 15 $atts['title'] = $title; 16 $atts['number'] = $nubmer; 17 $atts['category'] = $category; 18 19 return array($title,$number,$category); 20 } 21 add_shortcode('file_include','print_number'); 22 23 // ループ処理の設定(配列の変数を取得してループ処理に追加 24 $news_query = new WP_Query( 25 array( 26 'post_type' => 'post', 27 'category_name' => $category, 28 'posts_per_page' => $number, 29 ) 30 ); 31?> 32<div class="space_wrapper"> 33 <div class="space_ttl"> 34 <p> 35 36 </p> 37 </div> 38 <ul> 39 <?php if ( $news_query->have_posts() ) : ?> 40 <?php while ( $news_query->have_posts() ) : ?> 41 <?php $news_query->the_post(); ?> 42 <li> 43 <a href=""> 44 <div class="space_cat_inner"> 45 <div class="space_cat_thumb"> 46 <img src="#" alt="サンプル画像"> 47 </div> 48 <div class="space_cat_meta"> 49 <h2 class="post-list-title entry-title"> 50 ここにタイトルが入ります。ここにタイトルが入ります。ここにタイトルが入ります。ここにタイトルが入ります。 51 </h2> 52 </div> 53 </div> 54 </a> 55 </li> 56 <?php endwhile; ?> 57 <?php endif; ?> 58 <?php wp_reset_postdata(); ?> 59 </ul> 60</div>
試したこと
先述の通り、変数をglobal宣言してみましたが何も出力せず。。
エラー等も出ていないので、どこから着手すればいいかわからずじまいになっています。
補足情報
・WordPressのバージョン WordPress 5.1.1
・使用しているブラウザ GoogleChrome
・PHPバージョン 7.0
・使用サーバー mixhost
追記情報
ショートコードを書き忘れていたので追加します。。。
[file_include file='category' title='タイトル' number='2' category='test']
またショートコードは投稿でも固定ページにも両方使います。
追記情報その2
ディレクトリ構造とショートコードについて補足いたします。
plugins(プラグイン名) ┗functions.php ┗template ┗category.php
今回のショートコードは問題のショートコードとは別に
「プラグイン内のphpファイルを呼び出すための引数」も設定しています。
file='category'
ショートコードの上記の記述はそのための記述なので、問題とは関係がないかと。。
また、phpファイルを呼び出す引数の設定は、functions.phpに記載しています。
functionsphp
1function space_article($params = array()) { 2 extract(shortcode_atts(array('file' => 'default'), $params)); 3 ob_start(); 4 include(plugin_dir_path( __FILE__ ) . "templates/$file.php"); 5 return ob_get_clean(); 6} 7add_shortcode('file_include', 'space_article');
関係はないと思いますが一応載せておきます。。
回答1件
あなたの回答
tips
プレビュー