サポート » 使い方全般 » 「do_action」の呼び出し方について

  • このコードをオリジナルのテンプレートで呼び出したいです。
    <?php do_action( 'bbp_theme_before_topic_title' ); ?>

    このコードはプラグイン「BBpress」の「loop-single-topic.php」というファイルに書かれており、それによってきちんと表示される内容【※】があります。

    それに対してオリジナルのテンプレート「original.php」などにこのコードを書いても、「loop-single-topic.php」とは違い何も表示されません。

    どうしたら「original.php」でも表示させることができるようになるでしょうか?

    【※】ちなみに、表示される内容というのは、プラグイン「bbresolutions」によって付加される「BBpressの掲示板が解決済みか否か」に関する選択状態です。
    「loop-single-topic.php」に書かれたこのコードは「解決済み」を表示させ、それに対して「original.php」では表示しないということです。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは

    BBpress も bbresolutions も使ったことがないのではっきり分かりませんが、do_action( 'bbp_theme_before_topic_title' );はトピックのループの中で呼び出されている必要があると思います。

    loop-single-topic.php は loop-topics.phpから以下のように呼び出されています。

    		<?php while ( bbp_topics() ) : bbp_the_topic(); ?>
    
    			<?php bbp_get_template_part( 'loop', 'single-topic' ); ?>
    
    		<?php endwhile; ?>

    また、 bbresolutions で実行されるコード中ではbbp_get_topic_idという関数を実行してトピックIDを取得しようとしています。
    取得できない場合にはなにもせず終了しています。

    トピックのループの中で呼び出しているのに出力されない、ということでしたらごめんなさい。

    トピック投稿者 puniler

    (@puniler)

    ありがとうございます。それは見ておりませんでした。アドバイス感謝です。

    フロントページの人気記事一覧として使いたかったので、「page-front.php」に書いていた

    <div class="popularlist">
    <?php bbp_get_template_part( 'original' ); ?>
    </div>

    を仰る形に変えてみましたが…

    <div class="popularlist">
    <?php while ( bbp_topics() ) : bbp_the_topic(); ?>
    <?php bbp_get_template_part( 'original' ); ?>
    <?php endwhile; ?>
    </div>

    今度は「original.php」が読み込まれません。
    どうやらwhile ( bbp_topics() ) : bbp_the_topic();の条件にマッチしないから読み込んでくれないのだと思いますが、、

    かといって、いったいどんな条件にしたら良いのやらまるで分かりません。
    この条件の部分、どのようにしたら良いと思われますでしょうか?

    bbpressのことがよく分からなくて申し訳ないのですが、bbp_topics()の結果が空なんではないでしょうか。

    bbp_topics()が何らかの結果を返すためには、フォーラムが事前に指定されている必要がある気もしますが、最初に記述されていた方法でトピックが表示されていたのであれば、original.phpの中で同様のループが記述されているのではないですか?

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「「do_action」の呼び出し方について」には新たに返信することはできません。