Usa template_include con tipi di post personalizzati


11

Voglio verificare la presenza di un modello appropriato nella cartella dei temi prima di tornare al file nella mia directory dei plugin. Ecco il mio codice:

add_filter ('template_include', 'sermon_template_include');
funzione sermon_template_include ($ template) {
    if (get_query_var ('post_type') == 'wpfc_sermon') {
        if (is_archive () || is_search ()):
           if (file_exists (TEMPLATEDIR. '/archive-wpfc_sermon.php'))
              restituisce TEMPLATEDIR. '/Archive-wpfc_sermon.php';
           restituisce dirname (__ FILE__). '/Views/archive-wpfc_sermon.php';
        altro :
           if (file_exists (TEMPLATEDIR. '/single-wpfc_sermon.php'))
              restituisce TEMPLATEDIR. '/Single-wpfc_sermon.php';
           restituisce dirname (__ FILE__). '/Views/single-wpfc_sermon.php';
        finisci se;
    }
    return $ template;
}

Il problema è che non funziona! :-) Prende sempre il file nella mia cartella plugin. Qualche idea su cosa fare? Ho provato molte varianti ma non riesco a far funzionare nulla! Grazie in anticipo! Jack

MODIFICARE

Mi aspetto che l'archivio-wpfc_sermon.php venga restituito dalla cartella del tema, se esiste. Tuttavia, il file dal mio plugin viene sempre restituito. Grazie per l'aiuto! Questo è dal mio plugin Sermon Manager disponibile nel repository.


Quale file modello tema viene restituito quando invece ti aspetti che venga restituito il file modello plug-in?
Chip Bennett,

Mi aspetto che l'archivio-wpfc_sermon.php venga restituito dalla cartella del tema, se esiste. Tuttavia, il file dal mio plugin viene sempre restituito. Grazie per l'aiuto @ChipBennett! Questo è dal mio plugin Sermon Manager disponibile nel repository.
Jack,

Risposte:


6

Quindi, non sono sicuro di cosa stia causando il problema, ma potresti provare quanto segue:

  1. Percorso del file plug-in : sostituisci dirname(__FILE__)conplugin_dir_path( __FILE__ )
  2. Percorso del file del tema : sostituirlo TEMPLATEDIRconget_stylesheet_directory()

È possibile che il problema provenga dal riferimento diretto delle costanti.


0

Non sono sicuro che funzionerà per te, ma vale la pena provare. Lo uso sempre per i miei tipi di post personalizzati quando richiedono un modello speciale.

// Template selection Defines the template for the custom post types.
function my_template_redirect()
  {
  global $wp;
  global $wp_query;
  if ($wp->query_vars["post_type"] == "your_custom_post_type")
  {
    // Let's look for the your_custom_post_type_template.php template 
   // file in the current theme
    if (have_posts())
      {
          include(TEMPLATEPATH . '/your_custom_post_type_template.php');
          die();
      }
      else
      {
          $wp_query->is_404 = true;
      }
    }
}

Tutto quello che devi fare è aggiungere questo script nel tuo file Functions.php e inserire il file modello nella directory dei temi.

Potrebbe valere la pena provare e non causare conflitti con il tuo plugin. Tuttavia non ne sono sicuro.

Ho dimenticato ... non dimenticare di aggiungere l'azione. :)

add_action("template_redirect", 'my_template_redirect');

Grazie @Nicole, il codice che ho pubblicato funziona benissimo per chiamare il mio file modello. Tuttavia, voglio scansionare la cartella del tema corrente alla ricerca di un file con lo stesso nome prima di caricare quello nella mia cartella plugin.
Jack,

@Jack, quindi sostanzialmente chiama il tuo file dalla directory dei plugin prima del modello nella directory dei temi al momento? dovrò pensarci ancora. : DI ama una bella sfida!
Nicole,

Giusto! Mi ha davvero lasciato perplesso.
Jack,

@ Jack, potrebbe sembrare una domanda stupida, quindi perdonami se lo è. :) Il codice che hai pubblicato è quello nel plugin o è quello nel file Functions.php?
Nicole,

@Jack Il codice sopra riportato recupera il file modello dalla directory del tema. È possibile utilizzare un'istruzione if per verificare se "include" ha funzionato e, in caso contrario, tentare di recuperare il modello dalla directory del plug-in.
Stephen Harris,
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.