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 possui a propriedade ‘post_type’ definida. 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' );