前提・実現したいこと
Wordpressで別の投稿のサマリをとってくるショートコードを作成しています。
それにあたり、以下の内容を作成しています。
- functions.php 内にショートコードのコード
- function内から呼び出す用のファイルとしてcard.phpを作成
これらを用いて、投稿ページでショートコードを用いるとcard.phpが呼び出されるようにしたいと考えています。
なお、投稿記事のIDをショートコード内の引数で渡し、呼び出す投稿が指定できるようにしたいと思っています。
発生している問題
includeでファイルをとってこようとしましたが、引数を渡せず断念しました。
return以下にそのままhtmlコードを書こうともしましたが、<?php the_title(); ?>なども含んでるためかうまくいきませんでした。
なにかいい方法はありませんでしょうか。
該当のソースコード
php
1/*functions.php*/ 2 3function reviewCardDisplay($atts) { 4extract(shortcode_atts(array( 5 'rpost' => 0, 6 ), $atts)); 7return $rpost; //本来であればcard.phpに引数ありで渡せる内容を書きたい 8add_shortcode('r-card','reviewCardDisplay');
php
1/* card.php */ 2 3<?php 4global $rpost; 5$reviewTitle = get_the_title($post = $rpost); 6$reviewLink = get_the_permalink($post = $rpost); 7$reviewThumbnail = get_the_post_thumbnail($post = $rpost,'thumbnail'); 8$reviewExcerpt = get_the_excerpt($post = $rpost); 9ob_start(); 10echo reviews_calculate_ratings($post = $rpost); 11$reviewRating = ob_get_contents(); 12ob_end_clean(); 13?> 14<div class="review-card-box"> 15 <div class="entry row"> 16 <div class="review-card-eyecatch col-md-3 col-sm-3 col-xs-0"> 17 <a href="<?php echo $reviewLink ?>"> 18 <?php 19 add_filter( 'wp_get_attachment_image_attributes', 'reviews_lazy_load_product_images'); 20 echo $reviewThumbnail; 21 remove_filter( 'wp_get_attachment_image_attributes', 'reviews_lazy_load_product_images'); 22 $post_id = get_the_ID(); 23 ?> 24 25 </a> 26 </div> 27 <div class="entry-detail col-md-9 col-sm-9 col-xs-12"> 28 <div class="review-card-inside ratings clearfix pull-right l-star"> 29 <?php echo $reviewRating; ?> 30 </div> 31 <h3 class="review-card-title"> 32 <a href="<?php echo $reviewLink; ?>"><?php echo $reviewTitle; ?></a> 33 </h3> 34 <div class="r-excerpt"> 35 <?php 36 if (strlen($reviewExcerpt) > 120) { 37 echo mb_strimwidth($reviewExcerpt, 0, 120, "..."); 38 }else{ 39 echo $reviewExcerpt; 40 } 41 ?> 42 </div> 43 </div> 44 </div> 45</div> 46
html
1[r-card rpost=487]
PHP初心者で色々と試行錯誤をして調べたのですが、どうしてもわからずどなたかアドバイスをいただけると幸いです。
よろしくお願いします。
追記
php
1if( !function_exists('reviews_calculate_ratings') ){ 2 function reviews_calculate_ratings( $post_id = '' ){ 3 if( empty( $post_id ) ) { 4 $post_id = get_the_ID(); 5 } 6 $author_average = get_post_meta( $post_id, 'author_average', true ); 7 $user_average = get_post_meta( $post_id, 'user_average', true ); 8 if( empty( $author_average ) ){ 9 $author_average = 0; 10 } 11 if( empty( $user_average ) ){ 12 $user_average = 0; 13 } 14 echo '<span class="author-ratings pull-left">'; 15 echo '<span class="rating-title">'.esc_html__( 'AUTHOR RATE', 'reviews' ).'</span>'; 16 reviews_rating_display( $author_average ); 17 echo '</span>'; 18 19 if( comments_open( $post_id ) ){ 20 echo '<span class="user-ratings pull-left">'; 21 $direction = reviews_get_option( 'direction' ); 22 if( $direction == 'rtl' ){ 23 echo '<span class="rating-title">('.reviews_display_count_reviews( $post_id ).') '.esc_html__( 'USERS RATE', 'reviews' ).'</span>'; 24 } 25 else{ 26 echo '<span class="rating-title">'.esc_html__( 'USERS RATE', 'reviews' ).' ('.reviews_display_count_reviews( $post_id ).')</span>'; 27 } 28 reviews_rating_display( $user_average ); 29 } 30 echo '</span>'; 31 } 32}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/09 19:17 編集
退会済みユーザー
2018/04/10 09:39
2018/04/10 18:33