Спеціальний плагін для публікації: Де я розміщую шаблон?


11

Я пишу користувацький плагін типу публікації. Частину цього я вивожу до шаблону за допомогою шорткодів. Але для інших частин потрібен спеціальний шаблон публікації, і я зрозумів, як використовувати ієрархію шаблонів для CPT. Але власний шаблон є в темі, і я думаю, що плагін повинен бути самостійним, принаймні для початку.

То яка найкраща практика тут? Як ми включаємо файли шаблонів у плагін CPT? Чи можете ви вказати мені на особливо хороші приклади того, як це робиться?

Спасибі за вашу допомогу.



1
Не впевнений, що це дублікат, але це суб’єктивне питання. Найкращою практикою для мене було б дозволити темі обробляти її. Кращими практиками для інших було б зробити плагін повністю самостійним.
chrisguitarguy

@JohannesPille Я шукав, перш ніж запитувати. Але дякую за посилання. Я буду розбиратися в цьому.
NotoriousWebmaster

1
@chrisguitarguy Погодився. Моя проблема з тим, щоб дозволити темі обробляти її, якщо ми переключимо теми, нам доведеться виконати певні налаштування для розміщення плагіна. В іншому випадку ми втрачаємо те, що CPT приносить партії.
NotoriousWebmaster

Відповіді:


8

То яка найкраща практика тут?

Я б сказав, що комбінація дозволяє дозволити темі обробляти її та надавати за замовчуванням ваш плагін.

Ви можете використовувати single_templateфільтр, щоб вимкнути шаблон. Під час зворотного дзвінка подивіться, чи тема надала шаблон для типу публікації, якщо вона зробила, нічого не робити.

<?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;
}

Мені найкраще подобається цей метод. Поєднайте його, надавши звуковий набір "тегів шаблонів" (напр. the_content, the_title), Які підтримують будь-які користувацькі дані, що поєднуються з вашим типом публікації, і ви надаєте кінцевому користувачеві багато можливостей налаштування разом із деякими звуковими налаштуваннями. Bbpress дуже добре робить подібні речі: включає шаблони користувачів, якщо їх знаходить і надає багато тегів шаблонів.

Крім того, ви можете використовувати зворотний виклик з the_contentфільтром і просто змінювати вміст у самому вмісті.

<?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;
}

Я погоджуюся з @toscho, що немає чистого рішення. Але мені подобається концепція пропонування набору тегів категорії. Я підозрюю, що в моєму плагіні буде тематична папка із зразком шаблону CPT, і рекомендую користувачам адаптувати її до своїх обставин. Мені також подобається фільтр the_content, тому що він підключає мій вміст до макета користувача. Я можу реалізувати і те, і дозволити користувачеві вибирати, яким шляхом рухатись за допомогою перемикання параметрів.
NotoriousWebmaster

3

Ви можете підключити template_includeта повернути файл плагіна, якщо запит відповідає типу вашої пошти:

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;
}

Але це змінить погляд кардинально. Чистого рішення досі немає.


Так, ти маєш рацію, це змінило б вигляд, включаючи макет, віджети тощо. Занадто радикальний на мій смак. Але спасибі
NotoriousWebmaster
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.