我有一个短代码,将有一个大的HTML。
它将有4个选择,我将在短代码中获取数据:
$house_types = get_terms(array(
\'taxonomy\' => \'house_types\',
\'hide_empty\' => 0
));
我想插入一个可以读取此变量的模板,以便构建select,my template文件:
<label for="tipo">Tipos:</label>
<select name="tipo" id="house_types">
<option disabled selected value></option>
<?php
if(count($house_types) > 0) {
foreach($house_types as $house_type) {
echo \'<option value="\'.$house_type->term_id.\'">\'.$house_type->name.\'</option>\';
}
}
?>
</select>
我试图使用这个,但将模板放在主题中而不是插件目录中没有意义:
function rci_search_houses( $atts ) {
ob_start();
$house_types = get_terms(array(
\'taxonomy\' => \'house_types\',
\'hide_empty\' => 0
));
get_template_part(\'search\', \'select\');
$output = ob_get_contents();
ob_end_clean();
return $output;
}
add_shortcode(\'rci-search-houses\', \'rci_search_houses\');
但它没有显示任何东西。
有谁知道一种更好的方法来组织短代码,以防它有一个大的html?
最合适的回答,由SO网友:Mark Kaplun 整理而成
您的核心问题是,您将值作为全局值传递,但从不将其声明为全局值。
一般来说,当您希望让其他人能够通过子主题或插件覆盖它们时,“模板部分”很有用,但如果您正在执行“一次性”主题,则最好编写一个函数来生成表单并向其传递相关参数,而不是使用全局变量。