Чтобы повторно использовать некоторые общие функции в моей пользовательской теме, я пытаюсь автоматически загрузить класс, объявить глобальную переменную в функциях. php создать ее экземпляр, а затем использовать эту глобальную переменную, чтобы использовать функции внутри учебный класс. Мне не повезло с использованием переменной для вызова функций внутри класса, но я обращаюсь к классу непосредственно в функциях. php после того, как сценарий автозагрузки, кажется, работает. Тем не менее, это не помогает при попытке обратиться к этому классу в других php файлах, например, в тех, которые содержат мои пользовательские функции Walker.
Вот код, с которым я сейчас работаю:
theme_dir / inc / lib / cpp / Cpp. php
namespace cpp;
class Cpp {
public function __construct() {
}
public function generateRandomString() {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$characters_length = strlen($characters);
$random_string = '';
for ($i = 0; $i < $length; $i++) {
$random_string .= $characters[rand(0, $characters_length - 1)];
}
return ($random_string);
}
public function replaceSVGContent($match) {
$id = $this->generateRandomString();
return ('id="' . $id . '"');
}
public function fixSVGAccessibility($content) {
$patterns = array('/id="(.*?"/im');
return (preg_replace_callback($patterns, [$this, 'replaceSVGContent'], $content));
}
// function used for testing global variable approach
public function testFunc($msg) {
echo '<p>' . $msg . '</p>';
}
};
автозагрузчик. php
function _themename_theme_autoload($class_name) {
$directory_base = trailingslashit(plugin_dir_path(__FILE__));
// Directories to check
$directories = [
$directory_base,
$directory_base . 'inc/',
$directory_base . 'inc/lib/'
];
// Check all the directories
foreach($directories as $directory) {
$class_name = str_replace('\\', '/', $class_name);
if(file_exists($directory . $class_name . '.php')) {
require_once($directory . $class_name . '.php');
}
}
}
spl_autoload_register('_themename_theme_autoload');
функций. php
require_once(trailingslashit(get_template_directory()) . 'autoloader.php');
global $cpp;
$cpp = new \cpp\Cpp();
function _themename_test() {
echo \cpp\Cpp::testFunc('echo one');
echo $cpp->testFunc('echo two');
}
add_action( 'wp_footer', '_themename_test', 99 );
В конце концов, я бы хотел расширить класс и сейчас я хочу использовать его для рандомизации идентификаторов каждый раз, когда я вызываю SVG файл в теме PHP файл. Большая часть того, что я показываю выше, это просто попытка заставить тест работать (выведите «echo one» и / или «echo two» из функции _themename_test). Независимо от того, что я пробовал до сих пор, мне удалось получить только «эхо-сигнал» из тестовой функции, чтобы показать его в нижнем колонтитуле сайта.
Мне кажется, что я упускаю что-то очевидное здесь, но если бы кто-нибудь мог указать мне правильное направление, это было бы очень признательно.