Одно имя категории, разные родители.

8 Comments

Полночи бился с этим тупняком.

Суть – есть сайт, две основных категории – Ищу работу и Требуются. В них подкатегории. Подкатегории одинаковые, потому что слесари могут и требоваться и искать работу.

Постим туда через xml-rpc. Например, Иванов Иван, ищет слесаря в свою фирму. Т.е. категория слесарь родителя Требуются. Но при постинге не указывается родитель, указывается только имя категории – слесарь. И постится в тот родитель, который создан раньше. В моем случае Иванов Иван уже не ищет слесаря, а сам хочет им поработать.

Почитал доки по xml-rpc, ничего так и не нашел. Выход нашел, но не очень красивый.

Вот как тут быть?

Добавить postmeta через xml rpc

2 Comments

Или рожденные в муках познания.  XML-RPC как-то не очень дружит с документацией, никаких особо внятных вещей по поводу формата postmeta я так и не нашел.  И если как ставить какой-нибудь excerpt еще можно догадаться:

$content_struct['mt_excerpt'] = "string";

то вот до выставления даты можно долго доходить:

$date = gmdate("Ymd\TH:i:s",strtotime("+".rand(0,20)." day +
".rand(0,20)." hour +".rand(0,60)." minute"));
$content_struct['dateCreated'] = new IXR_Date($date);

В примере дата на 20 дней вперед-назад разносится.

Custom fields выставляются так:

$custom_fields = array(
     array(
                'key'  => 'price',
		'value'	 => 'val1'
	),
);
$content_struct['custom_fields']= $custom_fields;

XML RPC и mod_security

2 Comments

На некоторых хостингах, на свебе например, не дает постить в вп через xml-rpc.
В .htaccess

<Files xmlrpc.php>
SecFilterInheritance Off
</Files>

Полезные регулярки.

6 Comments

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

Примеры шаблонов

Выражение Совпадает
foo Слово foo
^foo Начинается с foo
foo$ Кончается с foo
^foo$ Точное совпадение с foo
[abc] a, b или c
[a-z] Любая строчная буква
[^A-Z] Любой  символ не в верхнем регистре
(gif|jpg) Совпадает либо gif либо jpeg
[a-z]+ Одна  или более строчных букв
[0-9.-] Любое число, точка или минус
^[a-zA-Z0-9_]{1,}$ Любое слово, в котором как минимум одна буква, число или _
([wx])([yz]) wy, wz или xy, xz
[^A-Za-z0-9] Любой символ (не буква и не цифра)
([A-Z]{3}|[0-9]{4}) Совпадает три буквы или четыре цифры

More

Карта сайта – какая у вас?

13 Comments

Карты сайта обычно у всех одинаковы – это простыня со списком ссылок, которых чем больше – тем лучше. Считается, что так лучше в плане сео. И хотя для ботов уже давно делают свою карту, в xml, многие продолжают делат как раньше.Особенно часто для вп используют плагин dagon sitemap generator.

Но можно все сделать красиво. Нашел вот примерчик, как можно сделать красивую карту сайта.

slickmap-css-sitemap

Данный пример хорошо подходит для коммерческого сайта, а вот для блога переделать его проблемно. Особенно, если постов много и категорий.
Немного поколдовав, я сделал вот такую карту сайта с использованием jQuery . Под осликами наверно не будет корректно отображаться.
sitemap More

Скрыть/показать несколько элементов – примеры jQuery

5 Comments

Одновременно выводит несколько скрывающихся/появляющихся блоков. Я использовал при создании своей карты сайта.

// Andy Langton's show/hide/mini-accordion - updated 18/03/2009
// Latest version @ http://andylangton.co.uk/jquery-show-hide

// this tells jquery to run the function below once the DOM is ready
$(document).ready(function() {

// choose text for the show/hide link - can contain HTML (e.g. an image)
var showText='Show';
var hideText='Hide';

// append show/hide links to the element directly preceding the element with a class of "toggle"
$('.toggle').prev().append(' (<a href="#">'+showText+'</a>)');

// hide all of the elements with a class of 'toggle'
$('.toggle').hide();

// capture clicks on the toggle links
$('a.toggleLink').click(function() {

// change the link depending on whether the element is shown or hidden
$(this).html ($(this).html()==hideText ? showText : hideText);

// toggle the display - uncomment the next line for a basic "accordion" style
//$('.toggle').hide();$('a.toggleLink').html(showText);
$(this).parent().next('.toggle').toggle('slow');

// return false so any link destination is not followed
return false;

});
});

Section one: a div with a paragraph

You can show/hide an entire div by giving it a class of «toggle». Links and other child elements will work fine too. The element directly before this one is a heading, so it gets a show/hide link appended.

Section two: single paragraph

A single paragraph can be hidden by giving it a class of toggle too. I can’t help but be impressed by how easy it is to use jquery – even for someone with limited programming and javascript experience like me. Again, the preceding element is a heading.

Now: a list

  • You can even hide a list
  • Just give the <ul> the toggle class
  • This time the preceding element is a paragraph
  • Подсмотрел тут

Несколько блогов на одном движке вордпресса.

6 Comments

Уже писал про скрипт массовой установки вордпресса, но вот появилось более оптимальное решение, как это сделать. При установке 100 штук вп моим скриптом, занимается очень много места на сами дистрибутивы + логи, поэтому найти решение как спасти интернеты дисковое пространство.
kretin015 More

Небольшой хак для навигации

No Comments

Немного подправил свой код постраничной навигации для вп. Теперь выводится название месяца, если листать архивы и название категории, если листать категорию.

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

<?php if(!is_single()){?>                                                         
 <?php                                                                   
 $max_page = $wp_query->max_num_pages;                             
 if(empty($paged) || $paged == 0) {                                
 $paged = 1;                                               
 }                                                                 
 ?>                                                                      
<div id="alt_nav">                                                                
 <div>                                                           
<?php if(!is_paged()){ ?>                                                         
<?php if(is_category()){  single_cat_title(); }?>                                 
<?php if(is_archive()){  the_time('F'); }?>                                       
 <?php } else { ?>                                                          
 Page <?php echo $paged; }?></div>                                     

 <ul id="mycarousel">                               
 <?php
 for($i=1; $i<$max_page+1; $i++){
 if($i == $paged){ ?><li><?php echo $i;?></li>
 <?php } else { ?>
 <li><a href="<?php echo clean_url(get_pagenum_link($i));?>"><?php echo $i;?></a></li>
 <?php } }?>
 </ul>
</div>
<?php }?>

У Neolota заметил полезную штучку – подсказки по вп в пдф.

Календарь в стиле iCal для архивов в wordpress

13 Comments

Давно пылится в черновиках красивый примерчик для календаря. В оригинале календарь под хтмл, я приладил для вордпресса, на страницу архивов по месяцам.
Вот тут можно посмотреть календарь в действии, скрин
calendar More

Критическая уязвимость в wordpress

6 Comments

На секлабе проскальзывала новость о том, как удаленно скинуть пароль админа в вп.
Если кратко, то вот так:

wp-login.php?action=rp&key[]=

И вот уже червячок появился.
Что делает. Подставляет свой код, расположенный на другом сервере и выполняет его. Уязвимы версии до 2.8.4

Проверяемся

Беглый осмотр.
Если все ссылки или фид стали со странными дополнениями вида

eval(base64_decode($_SERVER[HTTP_REFERER]))

или вроде, в админке в разделе пользователи появилась такая картина
wp-hacked, т.е. пользователей два, а вверху показывается три, это не глюк вп, это хитрый яваскрипт скрывает третьего пользователя от вас. На скрине и второй пользователь тоже через дырку добавлен ))
Далее проверяем на иньекцию в базе:

grep -H -r “eval(base64_decode” /var/lib/mysql
grep -H -r “var setUserName = function” /var/lib/mysql

Если есть совпадение, то значит база заражена. Также можно проверить папки на инлюд функции:

grep -r -i "function gpc_" ./*

У себя три блога нашел взломанных. Проверить наличие левых администраторов в блоге

Лечимся.

  • Правим пермалинки.
  • Далее из таблицы wp-usermeta.php запоминаем все id юзеров с meta_key – ‘first_name’.
  • Потом сносим их из wp_users.
  • Удаляем их также и из wp-usermeta.php

Older Entries