Cómo crear una nueva página de WordPress mediante programación

1 minuto de lectura

avatar de usuario
Espléndido

Estoy creando un plugin en wordpress. No puedo encontrar una manera de crear una nueva página de wordpress usando el complemento. Quiero crear una nueva página en la parte frontal de wordpress cuando el usuario active el complemento.

avatar de usuario
sonu pokade

Con la ayuda del código anterior, puede crear una página dinámica. En primer lugar, debemos verificar si la publicación que vamos a crear está disponible o no. Si está presente, no necesita crear otro, puede editar el contenido de la página. Pero si cambió el título de la página, se creará una nueva página. Aquí he creado una página con la ayuda del título de la página.

$check_page_exist = get_page_by_title('title_of_the_page', 'OBJECT', 'page');
// Check if the page already exists
if(empty($check_page_exist)) {
    $page_id = wp_insert_post(
        array(
        'comment_status' => 'close',
        'ping_status'    => 'close',
        'post_author'    => 1,
        'post_title'     => ucwords('title_of_the_page'),
        'post_name'      => strtolower(str_replace(' ', '-', trim('title_of_the_page'))),
        'post_status'    => 'publish',
        'post_content'   => 'Content of the page',
        'post_type'      => 'page',
        'post_parent'    => 'id_of_the_parent_page_if_it_available'
        )
    );
}

  • replace: ` ‘post_name’ => strtolower(str_replace(‘ ‘, ‘-‘, trim(‘title_of_the_page’))), ` with: ` ‘post_name’ => sanitize_title(‘title_of_the_page’), ` desarrollador.wordpress.org/reference/functions/sanitize_title

    – dj.cowan

    13 de julio de 2020 a las 6:12


Algo como esto

function some_function()
{
   $post_details = array(
  'post_title'    => 'Page title',
  'post_content'  => 'Content of your page',
  'post_status'   => 'publish',
  'post_author'   => 1,
  'post_type' => 'page'
   );
   wp_insert_post( $post_details );
}

register_activation_hook(__FILE__, 'some_function');

Ver aquí para otros parámetros posibles.

  • muchas gracias, funcionó 🙂 ¿Qué pasa si quiero contenido dinámico? Quiero decir que el contenido cambiará todos los días a través de la base de datos. mientras que aquí bajo el índice “post_content” estamos dando datos estáticos

    – Spidy

    7 sep 2015 a las 15:37

  • No estoy seguro de lo que quieres decir. ¿Quizás podrías explicarlo con más detalles? Si desea cambiar el contenido, actualice la página creada cuando lo necesite, supongo (el ID de la misma es devuelto por wp_insert_post).

    – Ígor Yavych

    7 sep 2015 a las 15:58

  • bajo el índice post_content de $post_details estamos dando un valor estático que es “Contenido de su página”. Ahora mi pregunta es ¿cómo puedo editar ese valor nuevamente? por ejemplo, quiero actualizar la página con este valor”

    Este es un párrafo simple.

    – Spidy

    7 sep 2015 a las 16:01

  • Al igual que $post_details = array( 'ID' => $id, 'post_content' => '<p>This is a simple paragraph.</p>', ); wp_update_post( $post_details ); Puede obtener la ID de la página recién creada de wp_insert_post así $id=wp_insert_post( $post_details );

    – Ígor Yavych

    7 sep 2015 a las 16:09


  • No es necesario crear una tabla. Tu puedes hacer update_option( 'my_option_key', $id ); en el gancho de activación, y luego get_option('my_option_key') para obtener esa identificación cuando lo haga. Además, debe verificar si esta opción existe antes de crear la página (para evitar la creación de múltiples páginas en múltiples activaciones)

    – Ígor Yavych

    7 sep 2015 a las 16:32


Una función de ayuda conveniente para crear un montón de páginas:

function create_page($title_of_the_page,$content,$parent_id = NULL ) 
{
    $objPage = get_page_by_title($title_of_the_page, 'OBJECT', 'page');
    if( ! empty( $objPage ) )
    {
        echo "Page already exists:" . $title_of_the_page . "<br/>";
        return $objPage->ID;
    }
    
    $page_id = wp_insert_post(
            array(
            'comment_status' => 'close',
            'ping_status'    => 'close',
            'post_author'    => 1,
            'post_title'     => ucwords($title_of_the_page),
            'post_name'      => strtolower(str_replace(' ', '-', trim($title_of_the_page))),
            'post_status'    => 'publish',
            'post_content'   => $content,
            'post_type'      => 'page',
            'post_parent'    =>  $parent_id //'id_of_the_parent_page_if_it_available'
            )
        );
    echo "Created page_id=". $page_id." for page '".$title_of_the_page. "'<br/>";
    return $page_id;
}

create_page( 'How it works', 'This is how it works');
create_page( 'Contact Us', 'The contact us page');
create_page( 'About Us', 'The about us page');
create_page( 'Team', 'The team page');
$pid = create_page( 'Sample Page', 'This is sample page');
create_page( 'Sample SubPage 1', 'This is sample SubPage 1',$pid);
create_page( 'Sample SubPage 2', 'This is sample SubPage 2',$pid);

avatar de usuario
Ghulam Alí

De esta manera usted puede agregar la página

// Create post object
 $my_post = array(
   'post_type'     => 'page',
   'post_title'    => 'My post',
   'post_content'  => 'This is my post.',
   'post_status'   => 'publish',
   'post_author'   => 1
 );

 // Insert the post into the database
wp_insert_post( $my_post );

Para más detalles ver esto https://codex.wordpress.org/Function_Reference/wp_insert_post

¿Ha sido útil esta solución?