Duplicar entradas o páginas sin plugins

Duplicar entradas o páginas sin plugins

¿Qué es un Snippet y para que sirve?

Un Snippet es un fragmento de código que aporta ciertas funciones a tu web sin la necesidad de instalar un plugin para ello.

La forma mas sencilla de añadir ese fragmento de código en tu web (hay varias) es usando el mega conocido plugin Code Snippets.

¿Cómo se instala Code Snippets?

Desde el repositorio de WodrPress busca «Code Snippets», lo instalas y lo activas.

¿Cómo se añade un fragmento de código?

Busca en el menú de tu backoffice «Fragmentos de código» con el icono de unas tijeras, y clica en Añadir nuevo, pones un título y pegas el snippet que de dejo en este tutorial.

No necesitas un Plugin para duplicar entradas

Aunque hay plugins específicos para duplicar entradas y otros contenidos, como Duplicate Post y otros similares, lo cierto es que no necesitamos nada de eso.

Te ahorras tener que instalar nada y aligeras tu web.

Con un simple fragmento de código podemos duplicar prácticamente cualquier contenido.

Lo puedes insertar con el famoso plugin Code Snippets.

Como Duplicar entradas o páginas sin plugins

Copia y pega este fragmento de código en un nuevo snippet:

				
					// Duplica una página o post de WordPress con un Click

add_filter("post_row_actions", "wpsh_add_duplicate_link", 10, 2);
add_filter("page_row_actions", "wpsh_add_duplicate_link", 10, 2); // agrega el enlace a las paginas

function wpsh_duplicate_post_as_draft()
{
    if (!current_user_can("edit_posts")) {
        return;
    }
    if (
        !isset($_GET["duplicate_nonce"]) ||
        !wp_verify_nonce($_GET["duplicate_nonce"], basename(__FILE__))
    ) {
        return;
    }
    global $wpdb; 
    if (
        !(
            isset($_GET["post"]) ||
            isset($_POST["post"]) ||
            (isset($_REQUEST["action"]) &&
                "wpsh_duplicate_post_as_draft" == $_REQUEST["action"])
        )
    ) {
        wp_die("No post to duplicate has been supplied!");
    }
    // This on here gets the original post id and post all the original post data
    $post_id = isset($_GET["post"])
        ? absint($_GET["post"])
        : absint($_POST["post"]);
   		 $post = get_post($post_id);
  
  // En el caso de que no desees que el usuario actual sea el autor de la nueva publicación, cambia esta línea a esto:
    $new_post_author = $post->post_author;
    $current_user = wp_get_current_user();
    $new_post_author = $current_user->ID; 

    // Si existen datos de la publicacion, crea la publicacion duplicada

    if (isset($post) && $post != null) {

        $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);

        // Conseguir todos los términos de publicación actuales y configúralos en el nuevo borrador de publicación

        $taxonomies = get_object_taxonomies($post->post_type); 
        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);
        }

        // Duplicar todos los meta post
        
        $post_meta_infos = $wpdb->get_results(
            "SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id"
        );
        if (count($post_meta_infos) != 0) {
            $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
            foreach ($post_meta_infos as $meta_info) {
                $meta_key = $meta_info->meta_key;
                if ($meta_key == "_wp_old_slug") {
                    continue;
                }
                $meta_value = addslashes($meta_info->meta_value);
                $sql_query_sel[] = "SELECT $new_post_id, '$meta_key', '$meta_value'";
            }
            $sql_query .= implode(" UNION ALL ", $sql_query_sel);
            $wpdb->query($sql_query);
        }

        // Redirigir a la pantalla de edición de publicación para el nuevo borrador
        wp_safe_redirect(
            admin_url("post.php?action=edit&post=" . $new_post_id)
        ); 
        exit();
    } else {
        wp_die(
            "Post creation failed, could not find original post: " . $post_id
        );
    }
}
add_action(
    "admin_action_wpsh_duplicate_post_as_draft",
    "wpsh_duplicate_post_as_draft"
);

// Agrega el enlace "Duplicate" a la lista de acciones para post_row_actions

function wpsh_add_duplicate_link($actions, $post)
{
    if (current_user_can("edit_posts")) {
        $actions["duplicate"] =
            '<a href="' .
            wp_nonce_url(
                "admin.php?action=wpsh_duplicate_post_as_draft&post=" . $post->ID,
                basename(__FILE__),
                "duplicate_nonce"
            ) .
            '" title="Duplicate this item" rel="permalink">Duplicate</a>';
    }
    return $actions;
}
				
			

Recuerda que para insertar el fragmento de código, te recomiendo usar Code Snippets.

Comparte en tus Redes Sociales

Facebook
Pinterest
Twitter
LinkedIn