Schimbă permalinkurile doar pentru post type 'post'

5 iun. 2018, 21:04:09
Vizualizări: 15.1K
Voturi: 7

Ca mulți alții, aș dori să am: domain.com/titlu-articol schimbat în domain.com/blog/titlu-articol dar doar pentru post type 'post', nu și pentru 'page' și cu siguranță nu pentru custom post types (din care tema mea pare să aibă multe).

Am făcut cercetări pe acest forum și pe alte surse și știu că răspunsul general pare să fie:

Când îți înregistrezi post type, argumentul with_front din rewrite ar trebui să fie false.

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

Din păcate, acest lucru nu ajută începătorii. Nu știm ce se înțelege prin instrucțiunile de mai sus. Se pare că ar trebui să reînregistrăm cumva post type-ul implicit "post" (deși post type-ul "post" există deja și este în uz), dar nu știm cum și unde să facem asta. Dacă cineva poate să lămurească procedura necesară pentru schimbarea URL-urilor articolelor din blog, aș fi foarte recunoscător.

5
Comentarii

Setările pentru tipul de postare post sunt controlate în ecranul de administrare Setări > Legături permanente.

Milo Milo
5 iun. 2018 21:09:05

@Milo Mulțumesc. Într-adevăr, există unele setări de URL care pot fi controlate în acest fel. Cu toate acestea, în cazul meu particular, doresc să modific setările de URL doar pentru postările care au tipul 'post'. Mai precis, dacă mă duc la setările de legături permanente -> Setări comune și în loc de opțiunea bifată curentă: "Numele postării" selectez 'Structură personalizată' și scriu '/blog/%postname%', nu doar toate postările mele de blog vor avea cuvântul 'blog' adăugat în fața URL-ului, ci și toate tipurile mele personalizate de postări. Acesta nu este rezultatul dorit.

Mihaela Grigore Mihaela Grigore
6 iun. 2018 15:25:46

Deja ai răspunsul la această problemă, tipurile personalizate ar trebui să fie înregistrate cu with_front setat la false așa cum ai descris în întrebarea ta de mai sus.

Milo Milo
6 iun. 2018 15:51:28

@Milo Deoarece aceste tipuri personalizate sunt create de către dezvoltatorii de teme, noi, utilizatorii începători de WordPress, nu știm ce înseamnă înregistrarea unui tip personalizat. Prin urmare, întrebarea noastră se referă exact la ce trebuie să facem pentru a înregistra și unde. Ar trebui să includem codul menționat într-un fișier functions.php dintr-un child theme care moștenește tema principală pe care o folosim? În acest caz, nu ar însemna asta că reînregistrăm un tip personalizat, deoarece acesta este deja înregistrat în tema părinte? Dezvăluire completă: Am încercat deja să fac cele de mai sus și nu are niciun efect, linkul lor încă se schimbă.

Mihaela Grigore Mihaela Grigore
6 iun. 2018 23:39:16

Dacă nu ai control asupra codului care înregistrează tipul de postare, atunci există un filtru care îți permite să modifici argumentele fără a fi nevoie să reînregistrezi tipul de postare. Vezi această întrebare și răspuns pentru un exemplu.

Milo Milo
7 iun. 2018 06:36:03
Toate răspunsurile la întrebare 3
4

Am găsit răspunsul aici. Nu uitați să vizitați linkul și să dați un like.

O să postez soluția aici, pentru cei care sunt grăbiți.


Introduceți acest cod în fișierul 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 );

(Testat și funcționează).

Nu uitați!!

Nu uitați A) Actualizați structura linkurilor permanente după aceasta (accesând Setări >> Linkuri permanente >> Apăsați 'Salvare modificări' ).

Nu uitați B) Dacă obțineți rezultate ciudate, încercați să deschideți o fereastră incognito și să verificați dacă funcționează acolo. WordPress are o funcție care redirecționează către 'URL-ul cel mai apropiat', ceea ce poate părea confuz atunci când experimentați cu linkurile permanente.


Ați putea încerca și să găsiți un Plugin care să facă asta. Eu nu aș face asta, deoarece este excesiv să adăugați un plugin doar pentru acest scop. Dar hei, - uneori poate fi satisfăcător să împuști vrăbii cu tunuri (nici o pasăre nu a fost rănită în realizarea acestei glume).

26 feb. 2020 15:40:26
Comentarii

O soluție scurtă și frumoasă cu o explicație rezonabilă. Din păcate, nu este ceea ce caut. În prezent, folosește definiția "rewrite" pentru a redirecționa către vechiul permalink ("/blog/post" -> "/post"). Totuși, eu doresc să păstrez URL-ul "/blog/post". Cum ai realiza acest lucru?

Chaoste Chaoste
2 nov. 2020 15:42:43

Pentru a extinde: Se poate remedia adăugând următoarele: 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 OMG care sunt șansele să am nevoie de asta chiar a doua zi. Am căutat peste tot - MULȚUMESC MULȚUMESC

gerbz gerbz
3 nov. 2020 23:25:32

Pare să nu funcționeze în 2023, pot vedea că $args este actualizat, dar nu au niciun efect după actualizarea legăturilor permanente?

dungey_140 dungey_140
13 mar. 2023 13:11:55
0

Ai încercat asta?

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 sept. 2019 19:46:02
2
//Plasează codul în 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' => 'resurse/blog'), // Adaugă slug-ul dorit aici
        'query_var' => false, 
        'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats'),
    )); 
    /* Dacă adaugi codul de mai sus în function.php, paginarea blogului tău va înceta să funcționeze. Va trebui să adaugi o regulă de rescriere folosind pluginul "Debug This" în secțiunea Query >> Rewrite și să modifici rewrite_rule. */ 
    add_rewrite_rule('(.?.+?)/page/?([0-9]{1,})/?$', 'index.php?pagename=resurse/blog&paged=$matches[1]', 'top');
}

26 feb. 2020 15:14:10
Comentarii

Hmm.. Nu aș face asta, deoarece 'reînregistrează' tipul de postare post.

Zeth Zeth
26 feb. 2020 15:25:39

Trebuie să modifici structura ta de permalink.

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