O que add_filters () e apply_filter () fazem?

Estou um pouco confuso sobre por que isso não está funcionando – embora deva ser dito que não tenho certeza do que apply_filters() e add_filter estão fazendo, então qualquer dica geral seria ótima também!

Eu quero uma consulta que traga as cinco postagens anteriores sobre uma única página de postagem. Estou enviando a data da postagem atual e desejo aplicar um filtro que filtre as postagens anteriores a esta.

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

Como eu aplico isso corretamente? Simplesmente usar add_filter ou apply_filter antes de instanciar um novo objeto WP_Query não parece funcionar corretamente.

Agradecemos antecipadamente!

Editar: Para aprofundar as coisas, gostaria de entender como passar uma variável para o filtro, pois não consigo fazer com que $ date passe de outra função.

Aqui está a outra função (é uma chamada ajax dentro do wordpress, portanto, começo obtendo o postar o ID da página atual por meio de uma variável $ _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; } 

Comentários

  • Ok, primeiras coisas, primeiro: a que gancho, exatamente, você está tentando adicionar o seu filtro? Isso é importante, porque sua $date variável usa $post dados, então precisamos saber se ' re-filtrando dentro ou fora do Loop.
  • Acho que é aqui que minha falta de conhecimento sobre filtros wp está me afetando. Achei que o gancho fosse ' posts_where ' e adicionaria a string fornecida à consulta SQL. Tanto quanto eu ' estou ciente de que ' está fora do loop, pois ' s na parte de pré-processamento da criação de um loop. Você tem alguma sugestão de como eu alcançaria meu objetivo com as melhores práticas?
  • Claro, podemos chegar lá. 🙂 Qual data você deseja usar? Perguntado com mais precisão: como você deseja determinar qual data usar?

Resposta

O que você está tentando filtrar? Presumo que você está tentando adicionar um filtro a um gancho de filtro chamado posts_before. Nesse caso, você precisa adicionar seu filtro a este gancho, via 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" ); 

Observe que alterei o nome da sua função. filter_posts_before() é muito genérico para um nome de função e muito provavelmente causa uma colisão de nomenclatura de função.

EDITAR

E apenas para esclarecer:

  • apply_filters() é a localização do gancho de filtro , é chamado por código principal e é usado para aplique quaisquer filtros que sejam adicionados à fila por Temas / Plug-ins ( e núcleo).
  • add_filter() é chamado por Temas / plug-ins (e núcleo), e é usado para adicionar filtros à fila para serem aplicados ao gancho pelo núcleo.

EDIT 2

Com base em seu comentário acima, o gancho é posts_where. Então, vamos tentar reconstruir sua função de retorno de chamada:

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

Comentários

  • Obrigado pelo esclarecimento! Eu ' certificarei de renomear o filtro. Ainda não ' não entendo como passar a $ data variável para isso, você poderia esclarecer isso também? Obrigado!
  • O que é a variável $date e de onde ela vem?
  • $ date vem de outra função minha, é a data da postagem atual, no formato ' Ymd '.
  • Você está globalizando $date ou retornando-o da função, o quê? Você pode postar o código ' dessa função , também?
  • Ok, eu ' atualizei a postagem original com mais alguns detalhes. Eu poderia globalizar a data, mas isso é totalmente necessário? É não é melhor, se possível, simplesmente ignorá-lo de alguma forma?

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *