Правильно ли так оформлять функции темы WP?
Вопрос к знатокам WP
Сейчас натягиваю тему и увидел такой подход
в functions.php
Подключаю php файл, например такой
require get_template_directory() . '/core/modules/post-upgrade.php'; |
require get_template_directory() . '/core/modules/post-upgrade.php';
дабы разбить всё по полочкам а не городить все в functions
Далее в post-upgrade.php
<?php if (!defined('WPINC')) { die; } class PostArticle { public static function load_module() { add_action('Post__theme-article-grid_label_partner', [__CLASS__, 'single_label_partner_grid'], 100); } public static function single_label_partner_grid($post_id) { $post_type = get_post_type($post_id); $field_db = get_post_meta($post_id, '_advert_post_front', true); if ($field_db == 'on') : ?> <div class="button button_partner button_size_small button_theme_default <?php echo ('advert_post' == $post_type) ? 'special-project-color' : ''; ?>"> <svg class="icon button__partner-icon"> <use xlink:href="<?php bloginfo('template_url'); ?>/assets/img/icons/sprite.svg#i-money"></use> </svg> <?php if ('advert_post' == $post_type) : ?> <span>Спецпроект</span> <?php else : ?> <span>Партнерский материал</span> <?php endif; ?> </div> <?php endif; } } PostArticle::load_module(); |
<?php if (!defined('WPINC')) { die; } class PostArticle { public static function load_module() { add_action('Post__theme-article-grid_label_partner', [__CLASS__, 'single_label_partner_grid'], 100); } public static function single_label_partner_grid($post_id) { $post_type = get_post_type($post_id); $field_db = get_post_meta($post_id, '_advert_post_front', true); if ($field_db == 'on') : ?> <div class="button button_partner button_size_small button_theme_default <?php echo ('advert_post' == $post_type) ? 'special-project-color' : ''; ?>"> <svg class="icon button__partner-icon"> <use xlink:href="<?php bloginfo('template_url'); ?>/assets/img/icons/sprite.svg#i-money"></use> </svg> <?php if ('advert_post' == $post_type) : ?> <span>Спецпроект</span> <?php else : ?> <span>Партнерский материал</span> <?php endif; ?> </div> <?php endif; } } PostArticle::load_module();
Вот вопрос к этому файлу, насколько это не колхоз? правильно ли с точки зрения WP так организовывать функции.
Ну и в самой теме вывожу через хук
<?php do_action('Post__theme-article-grid_label_partner', get_the_ID()); ?> |
<?php do_action('Post__theme-article-grid_label_partner', get_the_ID()); ?>
Хочу разбить на несколько таких файлов, чтоб где то лежали фукнции для главной, где то для single и т.д.
Дополнительно:
Как вообще можно что-то делать не зная даже что как называется (терминологию)?
Начинай делать правильно, а не натягивать презервативы куда не следует.
Ответы:
Есть вариант, приближенный к нормальным подходам
условно в вашем index.php
do_action("my_content");
Пример контента для author.page (надеюсь вы понимаете, что этот код не вставляется в author.php)
class AuthorPage { public function __construct() { add_action('content', [$this, 'template']); } public function data(): array { global $wp_query; $user = $wp_query->get_queried_object(); if (!($user instanceof WP_User)) { return []; } return [ 'title' => $user->first_name, ]; } public function template(): void { if (!is_author()) { return; } get_template_part("template-parts/author", null, [...$this->data()]); } } |
class AuthorPage { public function __construct() { add_action('content', [$this, 'template']); } public function data(): array { global $wp_query; $user = $wp_query->get_queried_object(); if (!($user instanceof WP_User)) { return []; } return [ 'title' => $user->first_name, ]; } public function template(): void { if (!is_author()) { return; } get_template_part("template-parts/author", null, [...$this->data()]); } }
сам template-parts/author.php:
<?php echo esc_html($args['title'] ?? ''); ?>
Идея нормальных подходов в том, чтобы не мешать логику и верстку. Все данныe получаете в классе, и передаете в теплейт, где уже и верстаете
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
