As funções adicionadas no hook ‘pre_get_posts’ são disparadas depois da criação da variável $query, mas antes desse atual query rodar efetivamente. E isso é útil para muitos cenários, como alterar algum parâmetro dessa query e para isso usamos as funções condicionais do WordPress para determinar quando executar determinada alteração.
E um problema recorrente ao usar esse hook com condicionais, como is_singular(‘cpt_name’) é o retorno desse ‘PHP Notice: Trying to get property ‘post_type’ of non-object’.
E isso acontece porque nesse momento o objeto que estamos verificando ainda não está definido. Para corrigir isso e verificar se a página atual é uma single de determinado cpt, podemos fazer da seguinte forma:
function dev_change_single_cpt($query) {
if ($query->is_singular && $query->get('post_type') === 'cpt_name') {
...
}
}
add_action('pre_get_posts', 'dev_change_single_cpt');