Biblioteca de códigos

Home / Códigos WordPress / Duplicar página WordPress

Duplicar página WordPress

Adicionar a opção de duplicar post e página no painel administrativo

3

Adicionar a opção de duplicar um post ou página no WordPress pode ser uma funcionalidade extremamente útil para os usuários, simplificando o processo de criação e edição de conteúdo. Atualmente, a plataforma oferece diversas ferramentas poderosas para gerenciar conteúdo, mas a capacidade de duplicar rapidamente uma postagem ou página pode economizar tempo e esforço significativos.

Imagine a seguinte situação: um usuário cria uma postagem ou página que serve como modelo ou base para outras semelhantes. Sem a opção de duplicar, o usuário teria que copiar manualmente o conteúdo, ajustar as configurações e recriar a estrutura. Isso não apenas consome tempo, mas também aumenta as chances de erros.

Ao adicionar a opção de duplicar, o usuário teria a facilidade de replicar uma postagem ou página existente com apenas alguns cliques. Essa funcionalidade pode ser implementada de maneira intuitiva, adicionando um botão “Duplicar” na tela de edição, próximo aos botões de salvar e publicar.

Ao clicar no botão “Duplicar”, o WordPress criaria uma cópia idêntica da postagem ou página, preservando todo o conteúdo, imagens, configurações e metadados associados. O usuário teria então a flexibilidade de fazer ajustes no novo conteúdo conforme necessário, poupando tempo e reduzindo a probabilidade de erros humanos.

Essa funcionalidade não apenas beneficia blogueiros e criadores de conteúdo, mas também profissionais de marketing digital e desenvolvedores web que trabalham em projetos complexos. A capacidade de duplicar página WordPress é uma adição valiosa para otimizar fluxos de trabalho e melhorar a eficiência global do processo de criação de conteúdo no WordPress.

Em resumo, a opção de duplicar página WordPress pode ser uma adição bem-vinda e prática, simplificando o trabalho dos usuários e aprimorando a experiência de gerenciamento de conteúdo na plataforma.

Código

<?php
// Add duplicate button to post/page list of actions.
add_filter( 'post_row_actions', 'wpcode_snippet_duplicate_post_link', 10, 2 );
add_filter( 'page_row_actions', 'wpcode_snippet_duplicate_post_link', 10, 2 );

// Let's make sure the function doesn't already exist.
if ( ! function_exists( 'wpcode_snippet_duplicate_post_link' ) ) {
/**
* @param array $actions The actions added as links to the admin.
* @param WP_Post $post The post object.
*
* @return array
*/
function wpcode_snippet_duplicate_post_link( $actions, $post ) {

// Don't add action if the current user can't create posts of this post type.
$post_type_object = get_post_type_object( $post->post_type );

if ( null === $post_type_object || ! current_user_can( $post_type_object->cap->create_posts ) ) {
return $actions;
}


$url = wp_nonce_url(
add_query_arg(
array(
'action' => 'wpcode_snippet_duplicate_post',
'post_id' => $post->ID,
),
'admin.php'
),
'wpcode_duplicate_post_' . $post->ID,
'wpcode_duplicate_nonce'
);

$actions['wpcode_duplicate'] = '<a href="' . $url . '" title="Duplicate item" rel="permalink">Duplicate</a>';

return $actions;
}
}

/**
* Handle the custom action when clicking the button we added above.
*/
add_action( 'admin_action_wpcode_snippet_duplicate_post', function () {

if ( empty( $_GET['post_id'] ) ) {
wp_die( 'No post id set for the duplicate action.' );
}

$post_id = absint( $_GET['post_id'] );

// Check the nonce specific to the post we are duplicating.
if ( ! isset( $_GET['wpcode_duplicate_nonce'] ) || ! wp_verify_nonce( $_GET['wpcode_duplicate_nonce'], 'wpcode_duplicate_post_' . $post_id ) ) {
// Display a message if the nonce is invalid, may it expired.
wp_die( 'The link you followed has expired, please try again.' );
}

// Load the post we want to duplicate.
$post = get_post( $post_id );

// Create a new post data array from the post loaded.
if ( $post ) {
$current_user = wp_get_current_user();
$new_post = array(
'comment_status' => $post->comment_status,
'menu_order' => $post->menu_order,
'ping_status' => $post->ping_status,
'post_author' => $current_user->ID,
'post_content' => $post->post_content,
'post_excerpt' => $post->post_excerpt,
'post_name' => $post->post_name,
'post_parent' => $post->post_parent,
'post_password' => $post->post_password,
'post_status' => 'draft',
'post_title' => $post->post_title . ' (copy)',// Add "(copy)" to the title.
'post_type' => $post->post_type,
'to_ping' => $post->to_ping,
);
// Create the new post
$duplicate_id = wp_insert_post( $new_post );
// Copy the taxonomy terms.
$taxonomies = get_object_taxonomies( get_post_type( $post ) );
if ( $taxonomies ) {
foreach ( $taxonomies as $taxonomy ) {
$post_terms = wp_get_object_terms( $post_id, $taxonomy, array( 'fields' => 'slugs' ) );
wp_set_object_terms( $duplicate_id, $post_terms, $taxonomy );
}
}
// Copy all the custom fields.
$post_meta = get_post_meta( $post_id );
if ( $post_meta ) {

foreach ( $post_meta as $meta_key => $meta_values ) {
if ( '_wp_old_slug' === $meta_key ) { // skip old slug.
continue;
}
foreach ( $meta_values as $meta_value ) {
add_post_meta( $duplicate_id, $meta_key, $meta_value );
}
}
}

// Redirect to edit the new post.
wp_safe_redirect(
add_query_arg(
array(
'action' => 'edit',
'post' => $duplicate_id
),
admin_url( 'post.php' )
)
);
exit;
} else {
wp_die( 'Error loading post for duplication, please try again.' );
}
} );
Deixe seu insight abaixo!

Continue lendo

WordPress em 2024: #SotW

Explore as novidades do WordPress em 2024! De evoluções no Gutenberg à liberação de dados, [...]

Inovação e marketing para alavancar a sua empresa

Manter-se relevante em meio às mudanças no mercado e na sociedade é o que as [...]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Abrir WhatsApp
1
Oi! Tudo bom? 👋🏻
Qual ideia iremos desenvolver hoje?