質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1415閲覧

WordPressの別の投稿のサマリをショートコードで取ってくるにはどうすればいいでしょうか。

unotalk

総合スコア124

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

0クリップ

投稿2018/04/08 23:03

編集2018/04/09 19:09

前提・実現したいこと

Wordpressで別の投稿のサマリをとってくるショートコードを作成しています。

それにあたり、以下の内容を作成しています。

  1. functions.php 内にショートコードのコード
  2. 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}
退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ファイルパスはお間違いなく。

function reviewCardDisplay( $params = array() ) { global $rpost; extract( shortcode_atts( array( 'file' => 'default', 'rpost' => '', ), $params )); ob_start(); $rpost = get_post( $rpost ); include( TEMPLATEPATH .'/card.php' ); return ob_get_clean(); } add_shortcode('r-card','reviewCardDisplay');

投稿2018/04/09 10:05

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unotalk

2018/04/09 19:17 編集

ありがとうございます!ほぼ解決しました。ob_startを使うのは考えもしなかったです。ありがとうございます。 ただcard.php内の$reviewRatingだけなぜか$rpostのデータが反映されませんでした。(デフォルト値が返ってきます) 追記のところに記載したreviews_calculate_ratings function が$reviewRatingが参照しているfunctionになるのですが、原因わかりますでしょうか。 card.php 内のreviews_calculate_ratings($post = $rpost)の$post が$post_idになってないからかと思ったのですが、変更しても変化はありませんでした。直接post idの数字をいれるとそのpost idのデータをとってきてくれます。
退会済みユーザー

退会済みユーザー

2018/04/10 09:39

ポストIDが必要なら reviews_calculate_ratings($rpost->ID) でどうでしょうか?
unotalk

2018/04/10 18:33

ありがとうございます!できました!ご丁寧に教えてくださり本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問