これが機能しない理由について少し混乱していますが、と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; }
コメント
回答
何をフィルタリングしようとしていますか? 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 '元の投稿をもう少し詳細に更新しました。日付をグローバル化できますが、それは完全に必要ですか?可能であれば、なんとかしてそれを渡すのは最善ではありませんか?
$date
変数が$post
データを使用しているため、'ループの内側または外側をフィルタリングします。