Risolvi un nome di tipo di post personalizzato rispetto al conflitto permalink della pagina (stessa lumaca)


19

Ho un tipo di post personalizzato chiamato "visningshus", e anche una pagina con quella lumaca. Questo è come dovrebbe (deve) essere.

Attualmente, " http://my-site.com/visningshus " elenca tutti i post di quel tipo. Voglio mostrare invece la pagina che ha quella lumaca permalink.

Come posso fare in modo che Wordpress non abbia la precedenza sul nome del tipo di post, ma invece sul permalink e mostri la Pagina?

Risposte:


33

Il modo più semplice sarebbe disabilitare la pagina di archivio per questo CPT:

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);

Non dimenticare di aggiornare successivamente i permalink in "Impostazioni> Permalink"


1
Ha funzionato perfettamente, ma ora tutti i permalink che iniziano con il nome del tipo di post personalizzato danno un 404, nonostante siano corretti in wp-admin e non sembra esserci alcuna riscrittura in corso. Vale a dire, tutti i permalink sono corretti sul sito, ma tutti i post personalizzati danno un 404. Puoi aiutarci? :)
Henrik Erlandsson,

@HenrikErlandsson Forse il tuo tipo di post ha lo stesso nome della pagina. In questo caso ti consiglio di cambiare il nome del tuo tipo di post. Esempio: nome del tipo di post personalizzato - Prima: prodotti Dopo: cpt_products.
Bruno Monteiro,

Molto intelligente. Risolve un sacco di problemi
bysanchy

8

Non ho una reputazione abbastanza alta da commentare il post di @ Carl, ma la sua è la risposta corretta (almeno a questa situazione di mantenere lo slug della pagina e il tipo di post personalizzato uguali e non usare un file archive.php)

Ma la sua risposta darebbe errori con l'impaginazione. Per evitare errori di impaginazione:

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');

Questo esamina l'impaginazione, afferra il numero di pagina e quindi sul rovescio della forza lo costringe a utilizzare la pagina con la lumaca corrispondente, quindi inserisce la variabile di pagina.

Questo oltre a quanto 'has_archive' => false,sopra pubblicato dovrebbe raggiungere la funzionalità desiderata.

Come altri hanno affermato, assicurarsi di svuotare le regole di riscrittura visitando Impostazioni> Permalink dopo aver apportato questa modifica.

Spero che questo aiuti qualcuno, perché so che questo mi ha sconcertato per molto tempo.


4

Tjena Henrik!

Penso che tutto ciò che devi fare è aggiungere una regola di riscrittura alle regole di riscrittura di Wordpress che sono già state create. Aggiungi questo snippet di codice alle tue funzioni.php del tuo tema o includilo come un pugin separato ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);

4
Se qualcuno lo utilizza, rimuovi flush_rewrite_rules();Non modificare le regole di riscrittura initogni volta. Ricarica una volta, quindi rimuovilo o scarica manualmente i permalink accedendo alle impostazioni del permalink nel pannello di amministrazione e fai clic su "Salva modifiche"
tehlivi

0

L'ho risolto senza risolvere il conflitto. Crea una pagina con lumache visningshus e scrivi quello che vuoi in essa. Prendi nota dell'ID di questa pagina.

Crea e personalizza il modello archive-custom-post-type.php nel modo che preferisci (molto probabilmente utilizzerai solo un modello di pagina) ma sostituisci la parte loop con

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;

Quindi quando andrai a http://my-site.com/visningshus vedrai il contenuto gestito dalla pagina nell'URL corretto.

Fammi sapere che funziona.


Bella idea, ma questo è eccessivamente complicato. Hai provato la mia soluzione?
Kraftner,

@kraftner no, non l'ho fatto. Ci proverò la prossima volta. Grazie!
Molokom,

Questo ha anche alcuni effetti collaterali come l'intestazione e tutto ciò che viene ancora creato come se fosse una pagina di archivio e non una pagina. Non consiglierei di usare quella soluzione.
Kraftner,

Cosa succede se l'ID pagina cambia? Questo non è sicuro
Joel James,

0

Non è consentito votare, ma + per la soluzione Carls, register_post_type dovrebbe avere

'has_archive' => false

Semplice. Tuttavia, quando si incontrano problemi di impaginazione, dare un'occhiata a

add_rewrite_rule

0

Ciò che lo ha risolto per me è stato impostare l'archivio come falso ma anche impostare il Gerarchico su falso quando si imposta il mio tipo di post personalizzato!


0

Ecco una soluzione generale per dare la priorità all'impaginazione sul contenuto dei tipi di post personalizzati per QUALSIASI lumaca di tipo post personalizzato.

// prioritize pagination over displaying custom post type content
add_action('init', function() {
  add_rewrite_rule(
    '(.?.+?)/page/?([0-9]{1,})/?$',
    'index.php?pagename=$matches[1]&paged=$matches[2]',
    'top'
  );
});

Oltre ad aggiungere questo frammento, dovresti anche assicurarti che il tuo tipo di post personalizzato abbia archive = false

e, ultimo ma non meno importante, vai alla pagina delle impostazioni dei permalink Impostazioni> Permalink (/wp/wp-admin/options-permalink.php) e salva le impostazioni correnti per aggiornare la struttura dei collegamenti sulla pagina.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.