Fatal error: Call to undefined function post_exists() - решение ошибки

24 февр. 2016 г., 14:45:34
Просмотры: 16.1K
Голосов: 4

Я использую функцию в своем собственном классе, так как использую другие функции WordPress в нем.

Я не могу понять, почему она не может найти функцию, хотя IDE "перейти к объявлению" указывает на файл wp-admin/includes/post.php

Функции из файлов wp-admin не являются глобальными.

5
Комментарии

Скорее всего, вы пытаетесь использовать эту функцию во фронтенде, что и вызывает ошибку. Функции бэкенда недоступны во фронтенде. Что именно вы пытаетесь сделать? Как я уже говорил (в удалённом комментарии), это проблема области видимости.

Pieter Goosen Pieter Goosen
24 февр. 2016 г. 14:52:55

Я проверяю, существует ли мой собственный пост в WordPress, и подумал, что встроенная функция лучше подходит для этой задачи

justnajm justnajm
24 февр. 2016 г. 15:03:34

Почему бы просто не использовать get_post() — если она возвращает пост, значит он существует, если нет — значит не существует. Либо скопируйте функцию post_exists в свою тему, переименуйте её, и тогда сможете использовать во фронтенде

Pieter Goosen Pieter Goosen
24 февр. 2016 г. 15:06:36

Я хочу проверить, существует ли уже запись с таким заголовком и содержимым?

justnajm justnajm
24 февр. 2016 г. 15:16:46

Я нашел лучшее решение - скопировать функцию post_exists в мой собственный класс, спасибо @PieterGoosen. Хотя эта функция также должна была быть объявлена на глобальном уровне

justnajm justnajm
25 февр. 2016 г. 08:25:46
Все ответы на вопрос 2
3
19

Файлы в директории wp-admin загружаются только при работе в админ-панели... когда вы просматриваете страницы или записи, эти функции не загружаются. В таком случае вам нужно сначала подключить файл, поэтому в вашей функции следует сделать что-то вроде этого:

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

Часть if ( ! is_admin() ) важна, потому что WordPress автоматически включает этот файл, когда is_admin() возвращает true, поэтому подключать его нужно только если is_admin() возвращает false. Также убедитесь, что добавили этот код до попытки вызвать функцию post_exists().

Если это не работает, попробуйте следующее:

if ( ! function_exists( 'post_exists' ) ) {
    require_once( ABSPATH . 'wp-admin/includes/post.php' );
}
25 февр. 2016 г. 01:11:30
Комментарии

Спасибо :), я не думаю, что хорошая идея включать все функции, определенные там, для проверки существования поста с таким же заголовком и содержимым

justnajm justnajm
25 февр. 2016 г. 08:30:05

Какая есть альтернатива для проверки существования поста по заголовку, без необходимости подключать post.php?

Robert Andrews Robert Andrews
1 февр. 2019 г. 13:24:20

Либо придется написать собственный код для этого, либо использовать существующую административную функцию с проверкой через function_exists

justnajm justnajm
27 февр. 2019 г. 14:22:10
0

Возможно, вы использовали неправильный хук.

Я столкнулся с этой проблемой при использовании:

function my_create_pages() {
    
    if ( !post_exists( "Мой заголовок" ) ) {
    
        // Создать запись
    }
}
add_filter('init', 'my_create_pages');

Решение заключалось в использовании хука admin_init:

function my_create_pages() {
    
    if ( !post_exists( "Мой заголовок" ) ) {
    
        // Создать запись
    }
}
add_filter('admin_init', 'my_create_pages');
20 июл. 2023 г. 10:50:19