Глобальная переменная Wordpress для создания экземпляра автозагрузки класса не работает - PullRequest
0 голосов
/ 31 января 2020

Чтобы повторно использовать некоторые общие функции в моей пользовательской теме, я пытаюсь автоматически загрузить класс, объявить глобальную переменную в функциях. 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). Независимо от того, что я пробовал до сих пор, мне удалось получить только «эхо-сигнал» из тестовой функции, чтобы показать его в нижнем колонтитуле сайта.

Мне кажется, что я упускаю что-то очевидное здесь, но если бы кто-нибудь мог указать мне правильное направление, это было бы очень признательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...