2010-01-12 3 views
3

Я работаю над настройкой темы по умолчанию Worpress. Я столкнулся с проблемой форматирования ссылок на архив.Переопределение wp_get_archives для темы в Wordpress

Тема по умолчанию использует функцию wp_get_archives, определенную в general-template.php. Выходной сигнал функции настраивается, но не настраивается для меня достаточно.

Я могу добиться всего, что хочу сделать, в основном переопределяя эту конкретную функцию в моем файле functions.php, но я не решаюсь это сделать, поскольку он вводит проблемы регрессии при обновлении Wordpress. wp_get_archives делает все элементы более низкого уровня, такие как конструкция запроса БД и кэширует результаты БД. Я бы очень хотел избежать этого, если смогу.

Другим способом, открытым для меня, является создание фильтра get_archives_link, в этот момент ссылка HTML уже отформатирована, и мне нужно будет запустить кучу регулярных выражений, чтобы понять это. Это кажется мне совершенно противоположным, так как это полностью убьет производительность.

Вот именно то, что я хочу, выход:

<li><a href="/year/01">JAN</a></li> 
<li class="current"><a href="/year/02">FEB</a></li> 
<li>MAR</li> <!--no blog entries this month--> 
... 

Насколько я могу видеть wp_get_archives имеет зашит текст якоря:

$text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year); 

Тогда Автошоу является проблемой добавляющих месяцев, которые имеют нет сообщений, я бы предпочел сделать это без разбора текста. Затем мне нужно будет добавить текущий класс (когда URL-адрес похож на .../2009/12).

У меня действительно есть решение, которое работает с использованием копии wp_get_archives. Это способ сделать что-то, и я слишком беспокоюсь ни о чем?

EDIT Я думаю, что реальный вопрос в том, правильно ли писать ваш язык SQL для темы Wordpress? И если это так, то в чем лучшая практика в этом.

ответ

1

Если вы определяете его в своем файле functions.php в своей активной теме, обычно не должно возникать проблема с регрессией.

Однако это не совсем верно при изменении темы по умолчанию. Если бы вы были тогда, чтобы обновить Wordpress, загрузив весь источник Wordpress, он перезапишет functions.php.

Чтобы решить эту проблему, дублируйте всю папку, содержащую тему по умолчанию. В новой копии отредактируйте style.css и измените строку 2 (название темы) на новое название темы.

Theme Name: WordPress Default

Wordpress теперь будет увидеть дополнительную тему, которую вы можете изменить к содержанию ваших сердец.

+0

Достаточно честный, я сделал его отдельной темой, чтобы он не зависал при обновлении Worpress. Проблемы с регрессией, которые я имел в виду, это изменения в схеме базы данных или интерфейсе кэширования. Насколько я понимаю, SQL очищается в фильтре, поэтому маловероятно, что произойдут изменения безопасности, связанные с SQL-инъекциями. –

Смежные вопросы