Переопределение wp_get_archives для темы в Wordpress - PullRequest
3 голосов
/ 12 января 2010

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

Тема по умолчанию использует функцию 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. Это способ делать вещи, и я слишком много беспокоюсь о них?

РЕДАКТИРОВАТЬ Полагаю, реальный вопрос в том, можно ли писать свой SQL для темы Wordpress? И если это так, то какова лучшая практика в этом?

1 Ответ

1 голос
/ 12 января 2010

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

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

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

Theme Name: WordPress Default

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

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