it-swarm-eu.dev

Použití single.php ze složky pluginů namísto výchozí složky šablony

Snažím se zjistit, jak používat jiný single.php pro vlastní plugin, který dělám. Je to pro vlastní typ příspěvku.

Protože pokud tento plugin instalují, nebudou mít ve své složce motivu vlastní produkt single-product.php. To je důvod, proč chci, aby byl ve složce pluginu.

Existuje způsob, jak změnit cestu tohoto typu vlastního příspěvku typu single.php nebo způsob, jak po instalaci tohoto pluginu automaticky vygenerovat soubor ve složce motivu?

Díky předem

2
user3428971

Myslím, že háček do template_include jako zde popsaný by mohl být správným způsobem, jak to udělat.

Kód může být takový:

add_filter('template_include', 'my_plugin_templates');
function my_plugin_templates( $template ) {
    $post_types = array('post');

    if (is_singular($post_types)) {
        $template = 'path/to/singular/template/in/plugin/folder.php';
    }

    return $template;
}
4
flomei

Pluginy by nikdy neměly mít žádný vizuální efekt, který není widget nebo krátký kód. Máte-li pocit, že je třeba manipulovat se soubory motivů, pak jste s největší pravděpodobností špatně.

* vždy existují výjimky jako cílení na konkrétní téma nebo dělá něco, co je tak tématickým agnosticem (jako je popup/lightbox), že existuje jen velmi malá šance na prolomení tématu nebo získání ošklivých výsledků.

EDIT z KOMENTÁŘE

Jedná se o problém hraniční linie bez jakéhokoliv typu bílé/černé odpovědi. Z toho, co popisujete, byste měli udělat téma a ne plugin, ale dostanu vám úkol. Správná cesta je jako u woocommerce - krátké kódy a widgety, které zobrazují obsah spravovaný jako CPT, jinak pravděpodobně nebudete hrát Nice se všemi tématy

1
Mark Kaplun

Kde get_custom_post_type_template je funkce WordPress by měl volat, když je obsah načítán. Funkce filtru, kterou plugin definuje, musí vrátit úplnou cestu k souboru šablony nebo výsledná stránka bude prázdná. Soubor šablony by měl mít stejné položky jako soubor single.php v motivu. Pro více informací navštivte stránky.

 <?php
    function get_custom_post_type_template($single_template) {
    global $post;

       if ($post->post_type == 'my_post_type') {
          $single_template = dirname( __FILE__ ) . '/post-type-template.php';
       }
    return $single_template;
    }
    add_filter( 'single_template', 'get_custom_post_type_template' );
?>
0
kamleshpal