Modificare i permalink solo per il post type 'post'

5 giu 2018, 21:04:09
Visualizzazioni: 15.1K
Voti: 7

Come molti altri, vorrei cambiare: dominio.com/titolo-articolo in dominio.com/blog/titolo-articolo ma solo per il post type 'post', non per 'page' e soprattutto non per i custom post types (di cui il mio tema sembra averne molti).

Ho fatto ricerche su questo forum e altre fonti e so che la risposta generale sembra essere:

Quando registri il tuo post type, l'argomento with_front di rewrite dovrebbe essere false.

$args = array(
    'rewrite' => array( 'with_front' => false ),
); 
register_post_type( 'your-post-type', $args );

Sfortunatamente, questo non aiuta i principianti. Non capiamo cosa si intenda con le istruzioni sopra. Apparentemente dovremmo in qualche modo ri-registrare il post type predefinito "post" (sebbene il post type "post" esista già ed è in uso), ma non sappiamo come e dove farlo. Se qualcuno può chiarire la procedura necessaria per cambiare gli URL degli articoli del blog, ne sarei molto grato.

5
Commenti

Le impostazioni del tipo di post post sono controllate nella schermata di amministrazione Impostazioni > Permalink.

Milo Milo
5 giu 2018 21:09:05

@Milo Grazie. Infatti, ci sono alcune impostazioni degli URL che possono essere controllate in quel modo. Tuttavia, nel mio caso specifico, voglio cambiare l'impostazione dell'URL solo per i post che hanno il tipo 'post'. Più precisamente, se vado nelle impostazioni dei permalink -> Impostazioni comuni e invece dell'opzione attualmente selezionata "Nome articolo" scelgo 'Struttura personalizzata' e scrivo '/blog/%postname%', non solo tutti i miei post del blog avranno la parola 'blog' preposta all'URL, ma anche tutti i miei tipi di post personalizzati. Questo non è il risultato desiderato.

Mihaela Grigore Mihaela Grigore
6 giu 2018 15:25:46

Hai già la risposta a quel problema, i tipi personalizzati dovrebbero essere registrati con with_front impostato su false come hai descritto nella tua domanda sopra.

Milo Milo
6 giu 2018 15:51:28

@Milo Poiché questi tipi personalizzati sono creati dagli sviluppatori del tema, noi utenti WordPress principianti non sappiamo cosa si intenda per registrare un tipo personalizzato. Pertanto, la nostra domanda si riferisce precisamente a cosa dobbiamo fare per registrarlo e dove. Dovremmo includere il codice menzionato in un file functions.php in un tema figlio che eredita il tema principale che utilizziamo? In tal caso, questo non significherebbe che stiamo ri-registrando un tipo personalizzato, dato che è già registrato nel tema genitore? Piena trasparenza: ho già provato a fare quanto sopra e non ha alcun effetto, il loro link continua a cambiare.

Mihaela Grigore Mihaela Grigore
6 giu 2018 23:39:16

Se non hai il controllo del codice che registra il tipo di post, c'è un filtro che ti permette di modificare gli argomenti senza dover ri-registrare il tipo di post. Vedi questa domanda e risposta per un esempio.

Milo Milo
7 giu 2018 06:36:03
Tutte le risposte alla domanda 3
4

Ho trovato la risposta qui. Ricordati di fare un salto e mettere un like.

La riporto qui per chi ha fretta.


Aggiungi questo nel file functions.php:

function wp1482371_custom_post_type_args( $args, $post_type ) {
  if ( $post_type == "post" ) {
    $args['rewrite'] = array(
      'slug' => 'blog'
    );
  }

  return $args;
}
add_filter( 'register_post_type_args', 'wp1482371_custom_post_type_args', 20, 2 );

(Testato e funzionante).

Ricorda!!

Ricorda A) Ricordati di aggiornare i tuoi permalink dopo (andando in Impostazioni >> Permalink >> Clicca 'Salva modifiche' ).

Ricorda B) Se ottieni risultati strani, prova ad aprire una finestra di navigazione in incognito e verifica se funziona lì. WordPress ha una funzionalità che reindirizza verso 'URL Più Corrispondente', che può sembrare confusa quando si modificano i permalink.


Potresti anche provare a trovare un Plugin che lo faccia. Personalmente non lo farei, visto che è eccessivo aggiungere un plugin solo per questo scopo. Ma hey, - a volte può essere soddisfacente sparare ai passeri con i cannoni (nessun passero è stato maltrattato per questa battuta).

26 feb 2020 15:40:26
Commenti

Una soluzione breve e bella con una spiegazione ragionevole. Purtroppo non è quello che sto cercando. Attualmente utilizza la definizione "rewrite" per reindirizzare al vecchio permalink ("/blog/post" -> "/post"). Tuttavia, voglio che mantenga l'URL "/blog/post". Come lo realizzeresti?

Chaoste Chaoste
2 nov 2020 15:42:43

Per estendere questo: si può risolvere aggiungendo quanto segue: add_filter('pre_post_link', 'my_change_post_link', 10, 3); function my_change_post_link($permalink, $post, $leavename) { if (get_post_type($post) == 'post') { return "/blog" . $permalink; } return $permalink; }

Chaoste Chaoste
2 nov 2020 16:04:46

@Chaoste OMMIODIO che probabilità c'erano che mi servisse proprio il giorno dopo. Ho cercato ovunque - GRAZIEMILLE

gerbz gerbz
3 nov 2020 23:25:32

Non sembra funzionare nel 2023, riesco a vedere che gli $args vengono aggiornati, ma non hanno alcun effetto dopo l'aggiornamento dei permalink?

dungey_140 dungey_140
13 mar 2023 13:11:55
0

Hai provato questo?

function generate_rewrite_rules( $wp_rewrite ) {
      $new_rules = array(
        '(.?.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename=$matches[1]&paged=$matches[2]',
        'blog/([^/]+)/?$' => 'index.php?post_type=post&name=$matches[1]',
        'blog/[^/]+/attachment/([^/]+)/?$' => 'index.php?post_type=post&attachment=$matches[1]',
        'blog/[^/]+/attachment/([^/]+)/trackback/?$' => 'index.php?post_type=post&attachment=$matches[1]&tb=1',
        'blog/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
        'blog/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
        'blog/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$' => 'index.php?post_type=post&attachment=$matches[1]&cpage=$matches[2]',     
        'blog/[^/]+/attachment/([^/]+)/embed/?$' => 'index.php?post_type=post&attachment=$matches[1]&embed=true',
        'blog/[^/]+/embed/([^/]+)/?$' => 'index.php?post_type=post&attachment=$matches[1]&embed=true',
        'blog/([^/]+)/embed/?$' => 'index.php?post_type=post&name=$matches[1]&embed=true',
        'blog/[^/]+/([^/]+)/embed/?$' => 'index.php?post_type=post&attachment=$matches[1]&embed=true',
        'blog/([^/]+)/trackback/?$' => 'index.php?post_type=post&name=$matches[1]&tb=1',
        'blog/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&name=$matches[1]&feed=$matches[2]',
        'blog/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&name=$matches[1]&feed=$matches[2]',
        'blog/page/([0-9]{1,})/?$' => 'index.php?post_type=post&paged=$matches[1]',
        'blog/[^/]+/page/?([0-9]{1,})/?$' => 'index.php?post_type=post&name=$matches[1]&paged=$matches[2]',
        'blog/([^/]+)/page/?([0-9]{1,})/?$' => 'index.php?post_type=post&name=$matches[1]&paged=$matches[2]',
        'blog/([^/]+)/comment-page-([0-9]{1,})/?$' => 'index.php?post_type=post&name=$matches[1]&cpage=$matches[2]',
        'blog/([^/]+)(/[0-9]+)?/?$' => 'index.php?post_type=post&name=$matches[1]&page=$matches[2]',
        'blog/[^/]+/([^/]+)/?$' => 'index.php?post_type=post&attachment=$matches[1]',
        'blog/[^/]+/([^/]+)/trackback/?$' => 'index.php?post_type=post&attachment=$matches[1]&tb=1',
        'blog/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
        'blog/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=post&attachment=$matches[1]&feed=$matches[2]',
        'blog/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$' => 'index.php?post_type=post&attachment=$matches[1]&cpage=$matches[2]',
      );
      $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    }
    add_action( 'generate_rewrite_rules', 'generate_rewrite_rules' );

    function update_post_link( $post_link, $id = 0 ) {
      $post = get_post( $id );
      if( is_object( $post ) && $post->post_type == 'post' ) {
        return home_url( '/blog/' . $post->post_name );
      }
      return $post_link;
    }
    add_filter( 'post_link', 'update_post_link', 1, 3 );
9 set 2019 19:46:02
2
//Inserisci il codice nel file function.php
add_action('init', 'my_new_default_post_type', 1);
function my_new_default_post_type()
{
    register_post_type('post', array(
        // 'labels' => $labels,
        'public' => true,
        //'show_in_admin_bar' => true,
        '_builtin' => false,
        '_edit_link' => 'post.php?post=%d',
        'capability_type' => 'post',
        'map_meta_cap' => true,
        'hierarchical' => false,
        'rewrite' => array('slug' => 'risorse/blog'), // Aggiungi il tuo slug qui
        'query_var' => false,
        'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats'),
    ));
    /* Se aggiungi il codice sopra in function.php, la paginazione del blog smetterà di funzionare. 
       Devi aggiungere una regola di riscrittura usando il plugin "Debug This" sotto Query >> Sezione Rewrite 
       e modificare la tua rewrite_rule. */
    add_rewrite_rule('(.?.+?)/page/?([0-9]{1,})/?$', 'index.php?pagename=risorse/blog&paged=$matches[1]', 'top');
}
26 feb 2020 15:14:10
Commenti

Mmm.. non lo farei, perché 'ri-registra' il tipo di post post.

Zeth Zeth
26 feb 2020 15:25:39

Devi modificare la struttura dei permalink.

Harshal Solanki Harshal Solanki
27 feb 2020 11:20:37