Plugin tipo di post personalizzato: dove devo inserire il modello?


11

Sto scrivendo un plug-in di tipo post personalizzato. Parte di esso sto inviando al modello tramite codici brevi. Ma altre parti richiedono un modello di post personalizzato e ho capito come utilizzare la gerarchia dei modelli per CPT. Ma il modello personalizzato è nel tema e sto pensando che il plugin dovrebbe essere autonomo, almeno per cominciare.

Quindi qual è la migliore pratica qui? Come possiamo includere file modello in un plug-in CPT? Puoi indicarmi esempi particolarmente validi di come viene fatto?

Grazie per l'aiuto.



1
Non sono sicuro che sia un duplicato, ma è una domanda soggettiva. La migliore pratica per me sarebbe lasciare che il tema lo gestisca. Le migliori pratiche per gli altri sarebbero di rendere il plugin completamente autonomo.
chrisguitarguy,

@JohannesPille Ho cercato prima di chiedere. Ma grazie per il link. Ci guarderò dentro.
NotoriousWebmaster

1
@chrisguitarguy Concordato. Il mio problema con la gestione del tema è che se cambiamo tema, dobbiamo fare alcune personalizzazioni per adattarlo al plugin. Altrimenti, perdiamo tutto ciò che il CPT porta alla festa.
NotoriousWebmaster

Risposte:


8

Quindi qual è la migliore pratica qui?

Direi una combinazione di lasciare che il tema lo gestisca e fornisca un valore predefinito con il tuo plugin.

È possibile utilizzare il single_templatefiltro per cambiare il modello. Nel tuo callback, vedi se il tema ha fornito un modello per il tipo di post, se lo ha fatto, non fare nulla.

<?php
add_filter('single_template', 'wpse96660_single_template');
function wpse96660_single_template($template)
{
    if ('your_post_type' == get_post_type(get_queried_object_id()) && !$template) {
        // if you're here, you're on a singlar page for your costum post 
        // type and WP did NOT locate a template, use your own.
        $template = dirname(__FILE__) . '/path/to/fallback/template.php';
    }
    return $template;
}

Mi piace questo metodo il migliore. Combinalo con la fornitura di un set audio di "tag modello" (ad es. the_content, the_title) Che supportano qualsiasi dato personalizzato associato al tuo tipo di post e offri all'utente un grande potere di personalizzazione insieme ad alcune impostazioni predefinite del suono. Bbpress fa davvero questo genere di cose: include i modelli utente se li trova e fornisce molti tag modello.

In alternativa, è possibile utilizzare un callback con the_contentfiltro e modificare semplicemente le cose nel contenuto stesso.

<?php
add_filter('the_content', 'wpse96660_the_content');

function wpse96660_the_content($content)
{
    if (is_singular('your_post_type') && in_the_loop()) {
        // change stuff
        $content .= '<p>here we are on my custom post type</p>';
    }

    return $content;
}

Sono d'accordo con @toscho che non esiste una soluzione pulita. Ma mi piace l'idea di offrire una serie di tag di categoria. Ho il sospetto che alla fine avrò una cartella tematica nel mio plugin, con un modello CPT di esempio, e consiglio agli utenti di adattarlo alle proprie circostanze. Mi piace anche il filtro the_content, perché inserisce i miei contenuti nel layout dell'utente. Posso implementare entrambi e consentire all'utente di scegliere la strada da percorrere con un'opzione attiva / disattiva.
NotoriousWebmaster

3

Puoi collegarti template_includee restituire il tuo file plugin se la richiesta è per il tuo tipo di post:

add_filter( 'template_include', 'insert_my_template' );

function insert_my_template( $template )
{
    if ( 'my_post_type' === get_post_type() )
        return dirname( __FILE__ ) . '/template.php';

    return $template;
}

Ma questo cambierà drasticamente l'aspetto. Non esiste ancora una soluzione pulita.


Sì, hai ragione, cambierebbe l'aspetto, inclusi layout, widget e così via. Troppo radicale per i miei gusti. Ma grazie.
NotoriousWebmaster
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.