WordPress get_template_part на основе пользовательского поля

#php #wordpress

#php #wordpress

Вопрос:

У меня есть тема WordPress со 100 различными частями шаблона — в идеале я хотел бы иметь возможность указать, какую часть шаблона загружать на основе значения настраиваемого поля post. т.е. Если значение поля post ABC равно get_template_part ABC-template.php . Я использую расширенные пользовательские поля для указания полей.

Чтобы получить значение поля, которое вы обычно используете:

 <?php the_field('field_name'); ?>
 

Я попробовал что-то вроде

 <?php $var = get_post_meta($post->ID, 'field_name', true);
    if ($var == '')
    { }
    else { get_template_part( "subdirectory/' . $var . '", "form" );} ?>
 

но это не сработало. Есть идеи по извлечению значения пользовательского поля и последующей загрузке соответствующей части шаблона с помощью get_template_part?

Я знаю, что теоретически я мог бы достичь этого с помощью функции in_category, но подумал, что необходимость перебирать 100-е «если post in_category ABC загружает шаблон ABC, если post in_category DEF загружает шаблон DEF» каждый раз, когда загружается сообщение, может немного замедлить работу веб-сайта?

Заранее большое вам спасибо, очень ценю любую помощь, которую вы можете предложить 🙂

Редактировать: с тех пор я разобрался с этим (методом проб и ошибок, я не разбираюсь в PHP!)

Вам нужно следующее:

 <?php
$fieldname = get_field('fieldname');
get_template_part('subdirectory/' . $fieldname ); ?>
 

Если у вас есть ABC-DEF, сохраненный в пользовательском поле, это загрузит шаблон в subdirectory/ABC-DEF.php

Надеюсь, это кому-то поможет 🙂

Комментарии:

1. Работает ли это, если вы жестко задаете имя шаблона? Если да var_dump( $var ) , и посмотрите, что вы получили из базы данных.

2. Спасибо за вашу помощь — все работает нормально, если я жестко закодирую имя шаблона — мне просто нужен PHP-код для автоматической вставки значения пользовательского поля в имя шаблона. Я пробовал редактировать примеры кода по адресу advancedcustomfields.com/resources/code-examples но без особого успеха — все они выводят значение пользовательского поля (ABC и т.д.), Но я не могу заставить PHP вставить это значение в get_template_part — извините, я не очень хорошо разбираюсь в PHP — обычно я могу настроить скрипты для работы с тем, что Мне нужно, у меня просто нет возможности писать с нуля. Спасибо, ребята