Eroare fatală: Call to undefined function post_exists() - Soluții și explicații

24 feb. 2016, 14:45:34
Vizualizări: 16.1K
Voturi: 4

Folosesc funcția în propria mea clasă, așa cum folosesc și alte funcții WordPress în ea.

Nu înțeleg de ce nu poate găsi funcția, în timp ce IDE-ul "go to declaration" mă direcționează către fișierul wp-admin/includes/post.php

Funcțiile din fișierele wp-admin nu sunt disponibile global?

5
Comentarii

Cel mai probabil încerci să-l folosești pe front-end, ceea ce ar explica eroarea. Funcțiile de back-end nu sunt disponibile pe front-end. Ce încerci să realizezi aici. După cum am spus (într-un comentariu acum șters), aceasta este o problemă de domeniu.

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

Testez dacă propriul meu post există în WordPress, am crezut că o funcție built-in este mai potrivită pentru această sarcină

justnajm justnajm
24 feb. 2016 15:03:34

De ce nu folosești pur și simplu get_post(), dacă returnează postul, înseamnă că există, dacă nu, nu există. Alternativ, poți copia funcția post_exists în tema ta și să-i schimbi numele, apoi o vei putea folosi pe front-end

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

Vreau să verific dacă postarea cu titlul și conținutul există deja?

justnajm justnajm
24 feb. 2016 15:16:46

Consider că cea mai bună soluție este să copiez funcția post_exists în clasa mea, mulțumesc @PieterGoosen, Deși această funcție ar fi trebuit să fie declarată la nivel global

justnajm justnajm
25 feb. 2016 08:25:46
Toate răspunsurile la întrebare 2
3
19

Fișierele din wp-admin sunt încărcate doar atunci când vă aflați în zona de administrare... când vizualizați pagini sau articole, acele funcții nu sunt încărcate. În acest caz, va trebui să includeți fișierul mai întâi, așa că ar trebui să faceți ceva de genul acesta în funcția dvs.:

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

Partea if ( ! is_admin() ) este importantă deoarece WordPress include fișierul automat atunci când is_admin() este true, așa că doriți să-l includeți doar dacă is_admin() este false. De asemenea, asigurați-vă că includeți acest fragment înainte de a încerca să apelați funcția post_exists().

Dacă acest lucru nu funcționează, încercați această variantă:

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

Mulțumesc :), nu cred că este o idee bună să incluzi toate funcțiile definite acolo pentru a verifica dacă există un post cu același titlu și conținut

justnajm justnajm
25 feb. 2016 08:30:05

Care este o alternativă pentru a verifica dacă există un post după titlu, fără a fi nevoie de post.php?

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

Fie va trebui să scrii propriul cod pentru asta, fie să folosești funcțiile existente din admin cu un apel function_exists

justnajm justnajm
27 feb. 2019 14:22:10
0

Posibil să fi folosit cârligul (hook) greșit.

Am avut această problemă când am folosit:

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

Soluția a fost să folosesc cârligul admin_init:

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