SoporteCategoría: QuestionsFatal error: Uncaught Error: Call to a member function get_page_permastruct() on null
David ha preguntado hace 5 años

Hola Carlos.
Tengo un formulario en la parte administrativa, una vez que recibo los datos del formulario via $_POST, necesito crear una página.
Para ello llamo a la función wp_insert_post($data) previamente compruebo si la página existe (sólo si no existe la creo).

// Config.php
public $post=[
‘gs_affiliate_tutellus_submit’ => __NAMESPACE__.’\Controllers\Admin::save’,
];

// Controllers\Admin.php
public static function save() {
$request = $_POST;
$page = get_posts([
‘name’ => $request[‘page’],
‘post_type’ => ‘page’,
‘post_status’ => ‘publish’]);

if (!$page) {
$slug = sanitize_title($request[‘page’]);

$data = [
‘post_title’ => $request[‘page’],
‘post_name’ => $slug,
‘post_type’ => ‘page’,
‘post_status’ => ‘publish’];

$id = wp_insert_post($data);
if (is_wp_error($id)) {
$errors = $id->get_error_messages();
foreach ($errors as $error) {
echo $error . «<br />»;
}
}

}
update_option(…); // save data
}

La pagina la crea correctamente pero me devuelve el siguiente error.
Fatal error: Uncaught Error: Call to a member function get_page_permastruct() on null in E:\backup\projects\xampp\laragon\wordpress\wp-includes\link-template.php:373 Stack trace: #0 E:\backup\projects\xampp\laragon\wordpress\wp-includes\link-template.php(335): _get_page_link(Object(WP_Post), false, false) #1 E:\backup\projects\xampp\laragon\wordpress\wp-includes\link-template.php(146): get_page_link(Object(WP_Post), false, false) #2 E:\backup\projects\xampp\laragon\wordpress\wp-includes\post.php(3800): get_permalink(Object(WP_Post)) #3 E:\backup\projects\xampp\laragon\wordpress\wp-content\plugins\gs-afillate\src\Controllers\Admin.php(228): wp_insert_post(Array) #4 [internal function]: GSAFILLATE\Controllers\Admin::save(‘3d329a45e9’, ‘https://affilia…&#8217;, ‘313158ca53ac47a…’, ‘eyJhbGciOiJIUzI…’, ‘Prueba’, ‘EUR’, ‘tecnologia’, ‘desarrollo-web’, ’12’, ‘Guardar cambios’) #5 E:\backup\projects\xampp\laragon\wordpress\wp-content\plugins\gs-afillate\src\Request.php(44): call_user_func_array(‘GSAFILLATE\\Cont…’, Array) #6 E: in E:\backup\projects\xampp\laragon\wordpress\wp-includes\link-template.php on line 373
La verdad estoy perdido, no sé si estoy haciendo algo mal
Gracias!

1 respuestas
Carlos Herrera Staff ha respondido hace 5 años

Hola David y Gracias por usar Antonella Framework. 
 
Este caso es muy similar a este
La solución es poniendo en la primera linea de la función save() esto:


require_once( ABSPATH . ‘wp-includes/pluggable.php’ );

Dime si te funciona. Saludos