@html_student
Молодой и глупый.

Правильно ли так оформлять функции темы WP?

Вопрос к знатокам WP
Сейчас натягиваю тему и увидел такой подход
в functions.php
Подключаю 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();


Вот вопрос к этому файлу, насколько это не колхоз? правильно ли с точки зрения WP так организовывать функции.

Ну и в самой теме вывожу через хук
<?php do_action('Post__theme-article-grid_label_partner', get_the_ID()); ?>


Хочу разбить на несколько таких файлов, чтоб где то лежали фукнции для главной, где то для single и т.д.
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 1
@weart
Есть вариант, приближенный к нормальным подходам

условно в вашем 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()]);
  }
}


сам template-parts/author.php:

<?php echo esc_html($args['title'] ?? ''); ?>

Идея нормальных подходов в том, чтобы не мешать логику и верстку. Все данныe получаете в классе, и передаете в теплейт, где уже и верстаете

65a3d8c4c8c31663463485.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы