サポート » プラグイン » WordPress Popular Posts・フィルターフック・get_template_part()

  • 解決済 keitahirai

    (@keitahirai)


    WPPのpost_htmlフィルターを、get_template_part()でテンプレファイルを読み込み実現させたい。
    投稿記事IDの取得方法がわからずにいます。

    ◆functions.php

    function my_custom_wpp($post_html) {
      global $post;
      $output = '';
      ob_start();
    
      if (is_page('name-a')) {
        get_template_part('template-a');
      }
      elseif (is_page('name-b')) {
        get_template_part('template-b');
      }
    
      $article = ob_get_contents($post->ID);
      ob_end_clean();
      $output = $article;
      return $output;
    }
    add_filter('wpp_post', 'my_custom_wpp', 10, 3);
    <?php $wpp = array(
    	'cat' => 1,
    	'limit' => 5,
    	'post_type' => 'post',
    	'range' => 'weekly',
    	'stats_comments' => '0',
    	'stats_views' => '0',
    ); wpp_get_mostpopular($wpp); ?>
8件の返信を表示中 - 1 - 8件目 (全8件中)
  • 何がしたいのかいまいちピンとこないですが、こんな感じでいけませんか?

    
    function my_custom_wpp( $post_html ) {
      global $post;
      $output = '';
      ob_start();
    
      if ( is_page( 'name-a' ) ) {
        $post_html .= get_template_part( 'template-a' );
      }
      elseif ( is_page('name-b') ) {
        $post_html .= get_template_part( 'template-b' );
      }
    
      $article = ob_get_contents( $post -> ID );
      ob_end_clean();
      $output = $article;
      return $output;
      return $post_html;
    }
    add_filter( 'wpp_post', 'my_custom_wpp', 10, 3 );
    

    何のために投稿IDを取得しているのかが分からないのでそのへんのコードは残してありますが、ただテンプレートパートを読むこむだけであれば削除しても問題ないと思います。

    もしこれがやりたいことではないのなら、もうちょっと情報を頂けると助かります。

    • この返信は4年、 10ヶ月前にToshihiro Kanaiが編集しました。
    スレッド開始 keitahirai

    (@keitahirai)

    Miruconさま

    返信を頂きありがとうございます。
    しかし、修正してくださったコードではランキング表示できませんでした。

    「投稿ID取得」というのは、「テンプレパートを読み込んでランキング表示させたい」というだけの意味です。
    投稿ID取得が必要に違いないという思い込みから、誤解を招く表現をしてしまいました。

    • この返信は4年、 10ヶ月前にkeitahiraiが編集しました。

    やりたいことは大体わかりました。

    こちらも出来るかどうかは不明ですが、以下のコードを試して頂けますか?

    
    function my_custom_wpp( $post ) {
    
      if ( is_page( 'name-a' ) ) {
        $post .= get_template_part( 'template-a' );
      }
      elseif ( is_page('name-b') ) {
       $post .= get_template_part( 'template-b' );
      }
    
      return $post;
    }
    add_filter( 'wpp_post', 'my_custom_wpp', 10, 3 );
    
    スレッド開始 keitahirai

    (@keitahirai)

    うーん、ありがとうございます。
    しかしfunctions.phpでget_template_partを利用するには、

    ob_start();
    ob_get_contents();
    ob_end_clean();

    この3点セットが必要なはずです。
    サムネやタイトルをどうやって読み込むんですかぇ。

    ソース見た感じ Thumbnails や Titles は既に出力されていますし、get_template_part() はただのテンプレートを読み込む、require のような関数ですから投稿情報の取得は必要ないと思いますが…

    https://github.com/cabrerahector/wordpress-popular-posts/blob/41ab26e3dd4eff730cc3a7a8278afe3ecaacbb24/includes/class-wordpress-popular-posts-output.php#L215

    ローカル環境でテストしてみたいのですが、PV数が取れないのでテストできず… 時間が空いた時にもうちょっといろいろ見てみます。

    スレッド開始 keitahirai

    (@keitahirai)

    Miruconさま
    ちょ、メッセージくださったお時間がw

    GithubURLのご連絡ありがとうございます!
    コアファイルを確認すべきでした、これでいじってみます。

    フィルターを通す際に $post 関数が噛まされて出力されている感じなのでフックかけるなら多分その変数かなーと思いましたが、そこだけしか見てないのでもしかすると別の物も関係してるのかもしれません。

    ちょっといじってみてダメそうならまた連絡くださいーいろいろ試してみます

    スレッド開始 keitahirai

    (@keitahirai)

    Miruconさま

    時間ができるといじっていたのですが、どうにも表示できませんでした…。
    ひとまずトピックを解決済みにして閉じますね。
    どこぞの他人かわからない私に、お付き合い頂き誠にありがとうございました。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「WordPress Popular Posts・フィルターフック・get_template_part()」には新たに返信することはできません。