Tu hogar de recursos

Encuentra plantillas web, plugins y más …

Cómo duplicar entradas, páginas y otros tipos de contenido sin plugins @ Ayuda WordPress


Crear un clon o duplicado de una publicación de WordPress es fácil con plugins, pero si eres de los que prefieres unas pocas líneas de código aquí te traigo la solución para tener la misma funcionalidad, pero sin plugins.

No hay mucho que hacer, simplemente copiar y pegar el siguiente código usando tu método favorito (archivo functions.php, plugin personalizado, plugin de fragmentos de código, etc.):

/* Duplicar entradas, paginas, etc sin plugins */
// Agregamos el enlace de duplicar a la lista de acciones rapidas
add_filter("post_row_actions", "rd_duplicate_post_link", 10, 2);
add_filter("page_row_actions", "rd_duplicate_post_link", 10, 2);
function rd_duplicate_post_link($actions, $post)
{
if (!current_user_can("edit_posts")) {
return $actions;
}
$url = wp_nonce_url(
add_query_arg(
[
"action" => "rd_duplicate_post_as_draft",
"post" => $post->ID,
],
"admin.php"
),
basename(__FILE__),
"duplicate_nonce"
);
//Evitar creación de enlaces en snippets Advanced Scripts, Scripts Organizer, etc
$miCat = get_the_category($post->ID);
$tipoPost = get_post_type($post->ID);
if ($tipoPost == "page" || $miCat[0]->name != "") {
$actions["duplicate"] =
'Duplicar';
}
return $actions;
}
// Creamos el duplicado como borrador y redirigir a la pantalla del editor
add_action(
"admin_action_rd_duplicate_post_as_draft",
"rd_duplicate_post_as_draft"
);
function rd_duplicate_post_as_draft()
{
if (empty($_GET["post"])) {
wp_die("No se ha facilitado ninguna publicacion que duplicar");
}
if (
!isset($_GET["duplicate_nonce"]) ||
!wp_verify_nonce($_GET["duplicate_nonce"], basename(__FILE__))
) {
return;
}
$post_id = absint($_GET["post"]);
$post = get_post($post_id);
// Si no quieres que el usuario actual sea el autor del duplicado cambia las siguientes lineas por esto: $new_post_author = $post->post_author;
$current_user = wp_get_current_user();
$new_post_author = $current_user->ID;
if ($post) {
$args = [
"comment_status" => $post->comment_status,
"ping_status" => $post->ping_status,
"post_author" => $new_post_author,
"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,
"post_type" => $post->post_type,
"to_ping" => $post->to_ping,
"menu_order" => $post->menu_order,
];
$new_post_id = wp_insert_post($args);
$taxonomies = get_object_taxonomies(get_post_type($post));
if ($taxonomies) {
foreach ($taxonomies as $taxonomy) {
$post_terms = wp_get_object_terms($post_id, $taxonomy, [
"fields" => "slugs",
]);
wp_set_object_terms(
$new_post_id,
$post_terms,
$taxonomy,
false
);
}
}
$post_meta = get_post_meta($post_id);
if ($post_meta) {
foreach ($post_meta as $meta_key => $meta_values) {
if ("_wp_old_slug" == $meta_key) {
continue;
}
foreach ($meta_values as $meta_value) {
add_post_meta($new_post_id, $meta_key, $meta_value);
}
}
}
// Para finalizar redirigimos a la pantalla del editor para editar el nuevo borrador
// wp_safe_redirect(
// add_query_arg(
// array(
// 'action' => 'edit',
// 'post' => $new_post_id
// ),
// admin_url( 'post.php' )
// )
// );
// exit;
// O si lo prefieres redirigimos todas las publicaciones con un mensaje
wp_safe_redirect(
add_query_arg(
[
"post_type" =>
"post" !== get_post_type($post)
? get_post_type($post)
: false,
"saved" => "post_duplication_created",
],
admin_url("edit.php")
)
);
exit();
} else {
wp_die("Ha fallado la creación del duplicado :(( ");
}
}
//Avisos en admin
add_action("admin_notices", "rudr_duplication_admin_notice");
function rudr_duplication_admin_notice()
{
$screen = get_current_screen();
if ("edit" !== $screen->base) {
return;
}
if (isset($_GET["saved"]) && "post_duplication_created" == $_GET["saved"]) {
echo '

Se ha creado el duplicado.

'; } }

Guarda los cambios del código, personalízalo si quieres,  y ya tendrás un nuevo enlace en las pantallas de listados de entradas, páginas y demás tipos de contenido, desde el que duplicar la publicación que quieras.

enlace duplicar publicacion admin wordpress sin pluginenlace duplicar publicacion admin wordpress sin plugin

Si haces clic se genera el duplicado, como era de esperar…

duplicado publicacion wordpress sin pluginduplicado publicacion wordpress sin plugin

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!



Fuente Original:

Compartir:

Noticias Relacionadas

Editar opciones