¿Qué hacen add_filters () y apply_filter ()?

Estoy un poco confundido en cuanto a por qué esto no funciona, aunque hay que decir que no estoy tan seguro de qué apply_filters() y add_filter lo están haciendo, ¡así que cualquier consejo general sería genial también!

Quiero una consulta que muestre las cinco publicaciones anteriores sobre una sola página de publicación. Estoy enviando la fecha de la publicación actual y quiero aplicar un filtro que filtre las publicaciones anteriores a esta.

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

Cómo ¿Aplico esto correctamente? El simple hecho de usar add_filter o apply_filter antes de crear una instancia de un nuevo objeto WP_Query no parece funcionar correctamente.

¡Gracias de antemano!

Editar: Para profundizar en las cosas, me gustaría entender cómo pasar una variable al filtro, ya que no puedo obtener $ date para pasar de otra función.

Aquí se dice otra función (es una llamada ajax dentro de wordpress, por lo tanto, comienzo obteniendo el ID de publicación para la página actual a través de una variable $ _POST):

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; } 

Comentarios

  • De acuerdo, Lo primero, lo primero: ¿a qué gancho, exactamente, estás tratando de agregar tu filtro? Eso es importante, porque su $date variable usa $post datos, por lo que necesitamos saber si ' re filtrar dentro o fuera del Loop.
  • Creo que aquí es donde mi falta de conocimiento de filtros wp me está golpeando. Pensé que el gancho era ' posts_where ', y agregaría la cadena dada a la consulta SQL. Hasta donde ' estoy consciente de que ' está fuera del bucle, ya que ' s en la parte de preprocesamiento de la creación de un bucle. ¿Tiene alguna sugerencia sobre cómo podría lograr mi objetivo con las mejores prácticas?
  • Claro, podemos lograrlo. 🙂 ¿Qué fecha quieres usar? Preguntado con más precisión: ¿cómo desea determinar qué fecha usar?

Responder

¿Qué estás intentando filtrar? Asumiré que está intentando agregar un filtro a un gancho de filtro llamado posts_before. En cuyo caso, debe agregar su filtro a este enlace, a través de 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" ); 

Tenga en cuenta que cambié el nombre de su función. filter_posts_before() es un nombre de función demasiado genérico y es muy probable que cause una colisión en el nombre de la función.

EDIT

Y solo para aclarar:

  • apply_filters() es la ubicación del gancho de filtro , es llamado por código central , y se usa para aplique cualquier filtro que agregue a la cola por Temas / Complementos ( y core).
  • add_filter() es llamado por Temas / Complementos (y core), y se usa para agregar filtros a la cola que se aplicarán al enlace por núcleo.

EDIT 2

Según tu comentario anterior, el gancho es posts_where. Entonces, intentemos reconstruir su función de devolución de llamada:

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" ); 

Comentarios

  • ¡Gracias por la aclaración! ' me aseguraré de cambiar el nombre del filtro. Sigo sin ' no entiendo cómo pasar la fecha $ a esto, ¿podría aclarar eso también? ¡Gracias!
  • ¿Qué es la variable $date y de dónde viene?
  • $ date viene de otra función mía, es la fecha de la publicación actual, en el formato ' Ymd '.
  • ¿Está globalizando $date o devolviéndolo de la función, qué? ¿Puede publicar el código de esa función ' , ¿también?
  • Okey-cokey, ' he actualizado la publicación original con algunos detalles más. Podría globalizar la fecha, pero ¿es completamente necesario? ¿No es mejor, si es posible, simplemente pasarlo por alto de alguna manera?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *