Перед редактированием темы Wordpress я предлагаю вам создать дочернюю тему, чтобы ваши изменения не терялись при обновлении темы.
Чтобы создать дочернюю тему, обратитесь к этому: https : //codex.wordpress.org/Child_Themes
Да, если вы хотите отредактировать заголовочный файл, скопируйте header.php из папки тем в папку дочерних тем и внесите необходимые изменения.
использовать `
( тяжелые акценты, также известные как backtick ) вместо одиночной кавычки ('
) или двойную кавычку ("
) и знак знака доллара / скобки ${ variable }
Например:
console.log(
`current date: ${new Date()}`
);
Подробнее о шаблонных литералах здесь .
Исправленный JavaScript Дугласа Крокфорда включает функцию String.prototype.supplant
. Это короткий, знакомый и простой в использовании:
String.prototype.supplant = function (o) {
return this.replace(/{([^{}]*)}/g,
function (a, b) {
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
// Usage:
alert("I'm {age} years old!".supplant({ age: 29 }));
alert("The {a} says {n}, {n}, {n}!".supplant({ a: 'cow', n: 'moo' }));
Если вы не хотите менять прототип String, вы всегда можете приспособить его к автономному или поместить его в другое пространство имен или что угодно.
"The {0} says {1}, {1}, {1}!".supplant(['cow', 'moo'])
– Robert Massa
19 February 2013 в 15:31
Развернув второй ответ Грег Киндел , вы можете написать функцию, чтобы исключить часть шаблона:
var fmt = {
join: function() {
return Array.prototype.slice.call(arguments).join(' ');
},
log: function() {
console.log(this.join(...arguments));
}
}
Использование:
var age = 7;
var years = 5;
var sentence = fmt.join('I am now', age, 'years old!');
fmt.log('In', years, 'years I will be', age + years, 'years old!');
Осторожно: избегайте использования любой системы шаблонов, которая не позволит вам избежать собственных разделителей. Например, невозможно было бы вывести следующее, используя упомянутый здесь метод supplant()
.
"Мне 3 года благодаря моей переменной {age}."
blockquote>Простая интерполяция может работать для небольших автономных скриптов, но часто приходит с этим недостатком дизайна, который ограничит любое серьезное использование. Я честно предпочитаю шаблоны DOM, такие как:
<div> I am <span id="age"></span> years old!</div>
И используйте манипуляции jQuery:
$('#age').text(3)
Альтернативно, если вы просто устали от конкатенации строк, всегда есть альтернативный синтаксис :
var age = 3; var str = ["I'm only", age, "years old"].join(" ");
Array.join()
медленнее, чем прямая (+
стиль), потому что браузерные двигатели (включая V8, который включает в себя узел и почти все, что запускает JS сегодня) оптимизировали его в массовом порядке, и есть большая разница в пользу прямой конкатенации
– pilau
19 November 2013 в 17:17
token
- при условии, что вы не предоставляете объект данных, который имеет член age
это будет хорошо.
– Chris Fewtrell
1 February 2014 в 17:18
supplant
необоснован: "I am 3 years old thanks to my {age} variable.".supplant({}));
возвращает именно данную строку. Если заданы age
, все еще можно распечатать {
и }
с помощью {{age}}
– le_m
13 July 2016 в 20:52
Я использую этот шаблон на многих языках, когда я не знаю, как правильно это сделать, и просто хочу быстро понять идею:
// JavaScript
var stringValue = 'Hello, my name is {name}. You {action} my {relation}.'
.replace(/{name}/g ,'Indigo Montoya')
.replace(/{action}/g ,'killed')
.replace(/{relation}/g,'father')
;
Хотя это не особенно эффективно, я находят это удобочитаемым. Он всегда работает и всегда доступен:
' VBScript
dim template = "Hello, my name is {name}. You {action} my {relation}."
dim stringvalue = template
stringValue = replace(stringvalue, "{name}" ,"Luke Skywalker")
stringValue = replace(stringvalue, "{relation}","Father")
stringValue = replace(stringvalue, "{action}" ,"are")
ВСЕГДА
* COBOL
INSPECT stringvalue REPLACING FIRST '{name}' BY 'Grendel'
INSPECT stringvalue REPLACING FIRST '{relation}' BY 'Mother'
INSPECT stringvalue REPLACING FIRST '{action}' BY 'did unspeakable things to'
UPDATE : Я обновил версию javascript для замены все , а не только первые.
Другой кувалдой: jquery-tmpl (шаблонизация с помощью jQuery).
Вот решение, которое требует, чтобы вы предоставили объект со значениями. Если вы не предоставляете объект в качестве параметра, он будет использовать глобальные переменные по умолчанию. Но лучше придерживаться этого параметра, он намного чище.
String.prototype.interpolate = function(props) {
return this.replace(/\{(\w+)\}/g, function(match, expr) {
return (props || window)[expr];
});
};
// Test:
// Using the parameter (advised approach)
document.getElementById("resultA").innerText = "Eruption 1: {eruption1}".interpolate({ eruption1: 112 });
// Using the global scope
var eruption2 = 116;
document.getElementById("resultB").innerText = "Eruption 2: {eruption2}".interpolate();
<div id="resultA"></div><div id="resultB"></div>
eval
, но иногда нет. Например, если OP хотел, чтобы интерполировать с использованием текущей области, без необходимости передавать объект поиска (например, как работает интерполяция Groovy), я уверен, что eval
потребуется. Не просто прибегать к старой «eval is evil».
– Ian
20 July 2014 в 14:41
eval
- единственный способ доступа к локальным переменным в области . Поэтому не отвергайте его только потому, что это вредит вашим чувствам. Кстати, я также предпочитаю альтернативный путь, потому что это безопаснее, но метод eval
- это то, что точно i> отвечает на вопрос OP, поэтому он находится в ответе.
– Lucas Trzesniewski
4 January 2015 в 14:14
eval
заключается в том, что он не может получить доступ к vars из другой области, поэтому, если ваш вызов .interpolate
находится в пределах другой функции, а не глобальной, это не сработает.
– georg
26 July 2015 в 10:36
Вы легко можете использовать ES6 template string
и перевести на ES5 с помощью любого доступного транспилярного бабеля.
const age = 3;
console.log(`I'm ${age} years old!`);
Вы можете использовать шаблонную систему прототипа , если вам действительно нравится использовать кувалду для взлома гайки:
var template = new Template("I'm #{age} years old!");
alert(template.evaluate({age: 21}));
Я могу показать вам пример:
function fullName(first, last) {
let fullName = first + " " + last;
return fullName;
}
function fullNameStringInterpolation(first, last) {
let fullName = `${first} ${last}`;
return fullName;
}
console.log('Old School: ' + fullName('Carlos', 'Gutierrez'));
console.log('New School: ' + fullNameStringInterpolation('Carlos', 'Gutierrez'));
Используйте литералы строк шаблона ECMAScript 2015, если это применимо.
Нет прямого способа сделать это, согласно ECMAScript 5, но в ECMAScript 6 есть шаблонные строки , которые также были известны как квазилитеры во время составления спецификации. Используйте их следующим образом:
> var n = 42;
undefined
> `foo${n}bar`
'foo42bar'
Вы можете использовать любое допустимое выражение JavaScript внутри {}
. Например:
> `foo${{name: 'Google'}.name}bar`
'fooGooglebar'
> `foo${1 + 3}bar`
'foo4bar'
Другая важная вещь: вам больше не нужно беспокоиться о многострочных строках. Вы можете написать их просто как
> `foo
... bar`
'foo\n bar'
. Примечание: я использовал io.js v2.4.0 для оценки всех строк шаблонов, показанных выше. Вы также можете использовать последний Chrome для тестирования приведенных выше примеров.
Примечание. Спецификации ES6 теперь завершены , но еще не реализованы всеми основными браузерами. Согласно страницам Mozilla Developer Network , это будет реализовано для базовой поддержки, начиная с следующих версий: Firefox 34, Chrome 41, Internet Explorer 12. Если вы Opera, Safari или Internet Explorer пользователь и интересуются этим сейчас, этот тестовый слой можно использовать, чтобы играть, пока все не получат поддержку для этого.
Если вы хотите интерполировать на выходе console.log
, то просто
console.log("Eruption 1: %s", eruption1);
^^
Здесь %s
- это так называемый «спецификатор формата». console.log
имеет встроенную встроенную поддержку интерполяции.
Попробуйте sprintf . Например:
vsprintf('The first 4 letters of the english alphabet are: %s, %s, %s and %s', ['a', 'b', 'c', 'd']);
Попробуйте kiwi , легкий JavaScript-модуль для строковой интерполяции.
Вы можете сделать
Kiwi.compose("I'm % years old!", [age]);
или
Kiwi.compose("I'm %{age} years old!", {"age" : age});