Archive for the ‘Wordpress’ Category

Как скрыть, что используется wordpress

Вордпресс наверно самый популярный движок в мире. Удобный, куча плагинов, тем и хаков. Все хорошо, но есть и ложка дегтя — это куча спама, попытки взлома, ну и частное мнение некоторых товарищей что на вордпрессе нельзя сделать что-то путное.

И вот была поставлена задача для одного сайта первоначально спрятать, что это вордпресс, а потом и выдать его за другую cms. Про то, как сделать из одной cms другую (по внешним признакам) я могу отдельно пост накатать, если кому интересно будет. Тут расскажу как убрать признаки вордпресса.

Сам поциэнт http://battmart.ru/, еще не готов в плане диза и наполнения, но попалить цмску на нем уже не получится. Определяется как битрикс, на самом деле вп обычный.

Итак, поехали.

Вордпресс палится сразу несколькими вещами. Для их определения мы заюзаем таблицу признаков cms.

Read On…

Ошибка Invalid taxonomy при использовании wp_insert_term

Ковыряю один интернет магазин на вордпрессе, на woocommerce. Так вот так, чтобы не перемешивались посты и товары, товарам поставили свою таксономию, отличную от простых постов. Категориям товаров соответственно тоже, чтобы не путались. И вот при импорте большого списка товаров и категорий в магазин, вываливается такая красота:

object(WP_Error)#273 (2) {
  ["errors"]=>
  array(1) {
    ["invalid_taxonomy"]=>
    array(1) {
      [0]=>
      string(16) "Invalid taxonomy"
    }
  }
  ["error_data"]=>
  array(0) {
  }
}

Смотрел сам код, там видимо когда постишь из админки, категории записываются в глобальные и дальше читаются из памяти (странное решение sic:) ). А когда просто инклюдишь нужные скрипты и используешь вызов wp_insert_term или wp_set_post_terms то вываливается ошибка. Как красиво решить не нашел, нашел как некрасиво.

global $wp_taxonomies;
$wp_taxonomies .= array('You_category');

И все сработало

Dagon sitemap generator и проблемы с ЧПУ

Есть у dagon sitemap generator один такой маленький баг — он при включенных ЧПУ не всегда правильно определяет номер страницы, выводит всегда только первую страницу.  Почему так происходит, я точно не определил, функция get_query_var видимо некорректно срабатывает.

Вылечить можно, добавив несколько строчек в файл плуга sitemap-generator.php

После строк

	$current_page = 1;
	if (get_query_var("pg")) {
		$current_page = get_query_var("pg");
	}

Добавляем:

	$url = $_SERVER['REQUEST_URI'];
        preg_match("([0-9]+)", $url, $out);
        if(($out[0] != $current_page) AND ($out[0] > 1)){ $current_page = $out[0]; }

Это примерно 1074 строка.

Вкратце, что делает код. Он проверяет номер страницы, который определяет сам плагин, с номером страницы в урле. Если они не совпадают, то берет номер страницы из урла. Проверялось на чпу вида /sitemap/4

UPD. Подправил немного, чтобы для нулевой страницы не переопределял номер.

Постинг изображений в wordpress через XML-RPC

небольшой код

 

$username = "username";
    $password = "password";
    $rpcurl = "http://myblog.com/xmlrpc.php";

    $image = fopen("file.jpg","r");
    $file = fread($image,filesize("file.jpg"));
    fclose($image);
    $filetype = "image/jpeg";
    $filename = "testimage.jpg";

$result = wpUploadFileXMLRPC($blogid,$rpcurl,$username,$password,$filename, $filetype, $file);
echo(print_r($result));

function wpUploadFileXMLRPC($blogid,$rpcurl,$username,$password,$filename, $filetype, $file){

    $params = array('',$username,$password,array('name'=>$filename, 'type'=>$filetype,'bits'=>$file,'overwrite'=>true));
    $request = xmlrpc_encode_request('wp.uploadFile',$params);
    $result = makeCall($request,$rpcurl);

    return($result);
}

Как убрать category из урла в wordpress

Можно колдовать с category base в настройках, но я нашел в интернетах более простой способ, добавив в functions.php пару строк

function seocategorydel($catlink1) {
 $catlink1 = str_replace('/category', '', $catlink1);
 return $catlink1;
}
add_filter('category_link', 'seocategorydel', 1, 1);

Навигация по категории.

В вордпрессе есть встроенная навигация по страницам prev_link next_link, но она ищет вообще по всем страницам. Мне тут понадобилось сделать такую же, только в пределах одной категории.

<ul>
 <?php
 $category = get_the_category();
 $catID = $category[0]->term_id;
 $myposts = get_posts('numberposts=2&offset=2&category=$catID');
 $t = 0;
 foreach($myposts as $post) :
 setup_postdata($post);
 if($t == 0){$class = "first";}
 if($t == 1){$class = "last";}
 $t++;
 ?>
 <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
 <?php endforeach; ?>
 </ul>

Чем еще полезен пример — позволяет вытащить инфу с массива категории. Я его постоянно ищу.
Вторая строка дает массив $category[0], в котором есть след вещи:

[term_id]
[name]
[slug]
[term_group]
[term_taxonomy_id]
[taxonomy]
[description]
[parent]
[count]
[object_id]
[cat_ID]
[category_count]
[category_description]
[cat_name]
[category_nicename]
[category_parent]

Т.е. можно вытащить отдельно имя категории — $category[0]->name;

P.S. Надо быть проще..

<ul>
<?php
$prevPost = get_previous_post();
?>
<li><a href="<?php echo get_permalink($prevPost->ID);?>"><?php echo $prevPost->post_title;?></a></li>
<?php
$prevPost = get_next_post();
?>
<li><a href="<?php echo get_permalink($prevPost->ID);?>"><?php echo $prevPost->post_title;?></a></li>
</ul>

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

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

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

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

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

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

css.php