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…’, ‘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!
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