add_filters()とapply_filter()は何をしますか?

これが機能しない理由について少し混乱していますが、とadd_filterが実行しているので、一般的なヒントも役立ちます!

以前の5つの投稿を表示するクエリが必要です。単一の投稿ページ。現在の投稿の日付を送信していますが、これより前の投稿を除外するフィルターを適用したいと思います。

function sw_filter_posts_before( $where = "", $date) { $where .= " AND post_date < "" . $date . """; return $where; } 

方法これを正しく適用しますか?新しいWP_Queryオブジェクトをインスタンス化する前にadd_filterまたはapply_filterを使用するだけでは、正しく機能しないようです。

よろしくお願いします!

編集:さらに詳しく説明するために、理解したいと思います。別の関数から$ dateを渡すことができないため、変数をフィルターに渡す方法。

他の関数について説明します(これはwordpress内のajax呼び出しであるため、まずは$ _POST変数を使用して現在のページのIDを投稿します):

function create_more_videos_sidebar() { $id = $_POST["theID"]; $args = array( "post_type" => "videos", "posts_per_page" => 1, "p" => $id ); $wp_query = new WP_Query($args); while ($wp_query->have_posts()) : $wp_query->the_post(); $do_not_duplicate = $post->ID; $date = get_the_date("Y-m-d"); endwhile; $args = array( "post_type" => "videos", "posts_per_page" => 5 ); add_filter( "posts_where", "sw_filter_videos_before" ); //don"t know how to pass $date $wp_query = new WP_Query($args); remove_filter( "posts_where", "sw_filter_videos_before" ); //do loop stuff $response = json_encode( array( "result" => $result ) ); header( "Content-Type: application/json" ); echo $response; exit; } 

コメント

  • わかりました、まず最初に:どのフックに、正確に、フィルターを追加しようとしていますか?重要なのは、$date変数が$postデータを使用しているため、'ループの内側または外側をフィルタリングします。
  • これは、wpフィルターの知識が不足していることに気が付くところかもしれません。フックは' posts_where 'であり、指定された文字列をSQLクエリに追加すると思いました。 ' 'がループの外側にあることを知っている限り、' sはループ作成の前処理部分にあります。ベストプラクティスで目標を達成する方法について提案がありますか?
  • もちろん、そこにたどり着くことができます。 :)何日に使いたいですか?より正確に質問:どの日付を使用するかを決定しますか?

回答

何をフィルタリングしようとしていますか? posts_beforeというフィルターフックにフィルターを追加しようとしていると仮定します。その場合、add_filter()を介して、このフックにフィルターを追加する必要があります。

function mytheme_filter_posts_before( $where = "", $date) { $where .= " AND post_date < "" . $date . """; return $where; } // Add function to the filter hook add_filter( "posts_before", "mytheme_filter_posts_before" ); 

関数名を変更したことに注意してください。 filter_posts_before()は関数名の一般的すぎて、関数名の衝突を引き起こす可能性が非常に高いです。

編集

そして明確にする:

  • apply_filters()フィルターフックの場所は、コアコードによって呼び出され、に使用されます。テーマ/プラグインによってキューに追加されたフィルターを適用します(およびコア)。
  • add_filter()テーマ/プラグイン(およびコア)であり、キューにフィルターを追加してコアごとにフックに適用するために使用されます。

編集2

上記のコメントに基づくと、フックはposts_whereです。それでは、コールバック関数を再構築してみましょう。

function mytheme_filter_posts_where( $where ) { // Here, we need to figure out how to // determine what date to use. In your // code example, you call get_the_date(), // but this function must be used inside // the Loop. Let"s try get_the_time() // instead. You"ll just need to come up // with a way to determine what post ID to use. $post = "some_post_id"; $date = get_the_time( "Y-m-d", $post ); $where .= " AND post_date < "" . $date . """; return $where; } // Add function to the filter hook add_filter( "posts_where", "mytheme_filter_posts_where" ); 

コメント

  • 説明ありがとうございます!'必ずフィルターの名前を変更します。まだ' $ dateを渡す方法がわかりません。これに対する変数ですが、それも明確にできますか?ありがとうございます!
  • $date変数とは何ですか?
  • $ dateは私の別の関数からのもので、現在の投稿の日付であり、' Ymd 'の形式です。
  • $dateをグローバル化するのですか、それとも関数から返すのですか?その関数'のコードを投稿できますか、また?
  • OK-cokey、I '元の投稿をもう少し詳細に更新しました。日付をグローバル化できますが、それは完全に必要ですか?可能であれば、なんとかしてそれを渡すのは最善ではありませんか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です