Errore fatale: Chiamata a funzione non definita post_exists()

24 feb 2016, 14:45:34
Visualizzazioni: 16.1K
Voti: 4

Sto utilizzando la funzione nella mia classe personalizzata mentre uso altre funzioni di WordPress al suo interno.

Non riesco a capire perché non trova la funzione mentre l'IDE con "go to declaration" mi punta al file wp-admin/includes/post.php.

Le funzioni dei file in wp-admin non sono disponibili globalmente?

5
Commenti

Molto probabilmente stai cercando di usarlo sul front end, il che spiegherebbe l'errore. Le funzioni del back end non sono disponibili sul front end. Cosa stai cercando di ottenere qui? Come ho detto (in un commento ora eliminato), si tratta di un problema di scope.

Pieter Goosen Pieter Goosen
24 feb 2016 14:52:55

Sto testando se il mio post esiste in WordPress, pensavo che la funzione integrata fosse più appropriata per il lavoro

justnajm justnajm
24 feb 2016 15:03:34

Perché non usare semplicemente get_post(), se restituisce il post, esiste, altrimenti non esiste. In alternativa, copia la funzione post_exists nel tuo tema e rinominala, così potrai usarla sul front end

Pieter Goosen Pieter Goosen
24 feb 2016 15:06:36

Voglio verificare se esiste già un post con titolo e contenuto?

justnajm justnajm
24 feb 2016 15:16:46

Ho scoperto che la soluzione migliore è copiare la funzione post_exists nella mia classe, grazie @PieterGoosen, anche se questa funzione avrebbe dovuto essere dichiarata a livello globale

justnajm justnajm
25 feb 2016 08:25:46
Tutte le risposte alla domanda 2
3
19

I file nella directory wp-admin vengono caricati solo quando sei nell'area di amministrazione... quando visualizzi pagine o articoli quelle funzioni non vengono caricate. In quel caso dovrai includere prima il file, quindi dovrai fare qualcosa come questo nella tua funzione:

if ( ! is_admin() ) {
    require_once( ABSPATH . 'wp-admin/includes/post.php' );
}

La parte if ( ! is_admin() ) è importante perché WordPress include automaticamente il file quando is_admin() è true, quindi vuoi includerlo solo se is_admin() è false. Assicurati inoltre di includere questo snippet prima di provare a chiamare la funzione post_exists().

Se questo non funziona, prova con:

if ( ! function_exists( 'post_exists' ) ) {
    require_once( ABSPATH . 'wp-admin/includes/post.php' );
}
25 feb 2016 01:11:30
Commenti

Grazie :), non credo sia una buona idea includere tutte le funzioni definite lì per verificare l'esistenza di un post con lo stesso titolo e contenuto

justnajm justnajm
25 feb 2016 08:30:05

Qual è un'alternativa per verificare l'esistenza di un post tramite titolo, senza richiedere post.php?

Robert Andrews Robert Andrews
1 feb 2019 13:24:20

O dovrai scrivere il tuo codice per farlo, oppure utilizzare una funzione di amministrazione esistente con una chiamata function_exists

justnajm justnajm
27 feb 2019 14:22:10
0

Potresti aver utilizzato l'hook sbagliato.

Ho avuto questo problema quando utilizzavo:

function my_create_pages() {
    
    if ( !post_exists( "My Title" ) ) {
    
        // Crea post
    }
}
add_filter('init', 'my_create_pages');

La soluzione è stata utilizzare l'hook admin_init:

function my_create_pages() {
    
    if ( !post_exists( "My Title" ) ) {
    
        // Crea post
    }
}
add_filter('admin_init', 'my_create_pages');
20 lug 2023 10:50:19