...

Aby dodać opcję duplikowania (kopiowania) wpisu w WordPress obok istniejących opcji, takich jak „edytuj”, „szybka edycja”, „kosz” i „zobacz”, możesz to zrobić za pomocą wtyczki lub przez dodanie kodu do pliku functions.php Twojego motywu.

Oto sposób, aby zrobić to za pomocą wtyczki:

  1. Zaloguj się do panelu administracyjnego WordPress.
  2. Przejdź do „Wtyczki” > „Dodaj nową”.
  3. W wyszukiwarce wpisz „Duplicate Post” lub „Yoast Duplicate Post” i wyszukaj wtyczkę.
  4. Zainstaluj i aktywuj wtyczkę.
  5. Wtyczka doda automatycznie opcję „Duplikuj” do Twojego panelu administracyjnego.

Jeśli wolisz dodać funkcjonalność bezpośrednio do pliku functions.php Twojego motywu, wykonaj następujące kroki:

  1. Zaloguj się do panelu administracyjnego WordPress.
  2. Przejdź do „Wygląd” > „Edytor motywów”.
  3. Otwórz plik functions.php.
  4. Wklej poniższy kod na końcu pliku:


function rd_duplicate_post_as_draft(){
  global $wpdb;
  if (! ( isset( $_GET['post']) || isset( $_POST['post'])  || ( isset($_REQUEST['action']) && 'rd_duplicate_post_as_draft' == $_REQUEST['action'] ) ) ) {
    wp_die('Brak wpisu do duplikacji');
  }
  $post_id = (isset($_GET['post']) ? $_GET['post'] : $_POST['post']);
  $post = get_post( $post_id );
  $current_user = wp_get_current_user();
  $new_post_author = $current_user->ID;
  if (isset( $post ) && $post != null) {
    $args = array(
      '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($post->post_type);
    if( !empty($taxonomies) ){
      foreach ($taxonomies as $taxonomy) {
        $post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
        wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
      }
    }
    $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);
    }
  }
  wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) );
  exit;
}
add_action( 'admin_action_rd_duplicate_post_as_draft', 'rd_duplicate_post_as_draft' );

function rd_duplicate_post_link( $actions, $post ) {
  if (current_user_can('edit_posts')) {
    $actions['duplicate'] = '<a href="' . wp_nonce_url('admin.php?action=rd_duplicate_post_as_draft&post=' . $post->ID, basename(__FILE__), 'duplicate_nonce' ) . '" title="Duplikuj ten wpis" rel="permalink">Duplikuj';
  }
  return $actions;
}

add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );
add_filter( 'page_row_actions', 'rd_duplicate_post_link', 10, 2 );
 

Teraz, po dodaniu powyższego kodu do pliku functions.php motywu, opcja „Duplikuj” zostanie dodana obok opcji „edytuj”, „szybka edycja”, „kosz” i „zobacz” dla każdego wpisu i strony. Pamiętaj, że te zmiany są specyficzne dla motywu, więc jeśli zaktualizujesz lub zmienisz motyw, będziesz musiał dodać kod do nowego motywu.

Nie znalazłeś funkcji, która Cię interesuje?
Napisz do mnie.

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *