Работа в WordPress (PHP).Я хочу установить строки в базу данных, как показано ниже.Строка является переводимой, поэтому она может быть на любом языке с сохранением кодов шаблона.Для возможных вариантов я представил здесь 4 строки:
<?php
$string = '%%AUTHOR%% changed status to %%STATUS_new%%';
$string = '%%AUTHOR%% changed status to %%STATUS_oldie%%';
$string = '%%AUTHOR%% changed priority to %%PRIORITY_high%%';
$string = '%%AUTHOR%% changed priority to %%PRIORITY_low%%';
Чтобы сделать строку удобочитаемой, для части %%AUTHOR%%
я могу изменить строку, как показано ниже:
<?php
$username = 'Illigil Liosous'; // could be any unicode string
$content = str_replace('%%AUTHOR%%', $username, $string);
Но для статуса и приоритета у меня есть разные подстроки разной длины.
Вопрос:
Как я могу сделать так, чтобы эти динамические подстроки заменялись на лету, чтобы они могли быть удобочитаемыми, как:
Illigil Liosous изменил статус на Newendotobulous;
Illigil Liosous изменил статус на Oldisticabulous;
Illigil Liosous изменил приоритет на Highlistacolisticosso;
Illigil Liosous изменил приоритет на Lowisdulousiannosso;
Эти неразумные слова позволят вам понять природу переводимой строки, которая может быть чем угодно, кроме известных слов.
Я думаю, что могу продолжитьс примерно таким, как показано ниже:
<?php
if( strpos($_content, '%%STATUS_') !== false ) {
// proceed to push the translatable status string
}
if( strpos($_content, '%%PRIORITY_') !== false ) {
// proceed to push the translatable priority string
}
Но как мне эффективно заполнить эти условные выражения?
Редактировать
МогуЯ не совсем согласен с моим вопросом, поэтому обновляю запрос.Проблема не связана с массивом str_replace.
Проблема в том, что $string
, который мне нужно обнаружить, не является предопределенным.Это будет выглядеть так:
if($status_changed) :
$string = "%%AUTHOR%% changed status to %%STATUS_{$status}%%";
else if($priority_changed) :
$string = "%%AUTHOR%% changed priority to %%PRIORITY_{$priority}%%";
endif;
Где они будут динамически заполняться значениями в $status
и $priority
.
Так что, когда дело доходит до str_replace()
Я на самом деле будуиспользуйте функции, чтобы получить соответствующие метки:
<?php
function human_readable($codified_string, $user_id) {
if( strpos($_content, '%%STATUS_') !== false ) {
// need a way to get the $status extracted from the $codified_string
// $_got_status = ???? // I don't know how.
get_status_label($_got_status);
// the status label replacement would take place here, I don't know how.
}
if( strpos($_content, '%%PRIORITY_') !== false ) {
// need a way to get the $priority extracted from the $codified_string
// $_got_priority = ???? // I don't know how.
get_priority_label($_got_priority);
// the priority label replacement would take place here, I don't know how.
}
// Author name replacement takes place now
$username = get_the_username($user_id);
$human_readable_string = str_replace('%%AUTHOR%%', $username, $codified_string);
return $human_readable_string;
}
У функции есть некоторые упущенные точки, в которых я застрял.: (
Можете ли вы подсказать мне выход?