<?php //(shortcodes.php)
/* PHPファイル include ショートコード
* で、phpファイルを呼び出し
====================================== */
function shortcode_part_file($params = array()) {
$params = shortcode_atts(array(
'file' => '',
'id' => '',
'class' => ''
), $params, 'part');
$file = $params['file'];
// 形式への対応
// WordPressは を $params[0] => '="value"' として渡す
if (empty($file) && !empty($params[0])) {
$file = trim($params[0], '="\'');
}
if (empty($file)) return '';
ob_start();
echo '<div' .
(!empty($params['id']) ? ' id="' . esc_attr($params['id']) . '"' : '') .
(!empty($params['class']) ? ' class="' . esc_attr($params['class']) . '"' : '') .
'>';
// .php が含まれていなければ付与(どちらの書き方でも動くように)
$filename = pathinfo($file, PATHINFO_EXTENSION) === 'php' ? $file : $file . '.php';
// ディレクトリトラバーサル対策
$filename = str_replace('..', '', $filename);
$file_path = get_stylesheet_directory() . '/' . $filename;
if (file_exists($file_path)) {
include($file_path);
} else {
if (defined('WP_DEBUG') && WP_DEBUG) {
echo '<!-- ファイルが見つかりません: ' . esc_html($filename) . ' -->';
}
}
echo '</div>';
return ob_get_clean();
}
add_shortcode('part', 'shortcode_part_file');