W jednym z właśnie realizowanych projektów namieszałem ze stworzonymi rolami i ustawieniami dostępu do elementów panelu administracyjnego. Wszystko dla czystości i przejrzystości panelu administracyjnego dla administratorów projektu.

Użyłem wielu wtyczek, aby ustawić te najbardziej odpowiednie ustawienia:

  • Advanced Access Manager
  • Hide Admin Panels
  • Menu by User Role for WordPress
  • Role Manager
  • Role Scoper

Wszystkie coś dodały do bazy, pozmieniały ustawienia – generalnie wyszło tak, że z poziomu admina nie miałem dostępu do niektórych wtyczek, a zamiana ustawień dostępów powodowała niemały „zamęt grubymi nićmi szyty”.

Postanowiłem zatem całkowicie zresetować stworzone ustawienia i role, które w/w wtyczki raczyły mi wprowadzić w bazie.

Dlatego też stworzyłem nowego użytkownika, który posiadał maksymalnie szerokie dostępy, które udało mi się uzyskać z poziomu aktualnego administratora – im więcej, tym lepiej.

Najlepiej, gdyby nowo stworzony użytkownik posiadał tą samą rolę, co admin + max ustawienia dostępu (privillages).

Tutaj warto wspomnieć, aby wykonać kopię zapasową bazy danych ;) Nie zapomnijcie, o tym, bo później – jeśli cokolwiek namieszacie – może być naprawdę gorąco!

 

jak-wykonac-backup-bazy-danych-wordpressJak wykonać backup bazy danych w WordPress?

Jeśli nie wiecie jak to zrobić – najlepiej zalogować się do Waszego konta phpMyadmin (dostępu poszukajcie w swoim cpanelu lub spytajcie administratora serwera hostingowego), wyszukać bazę danych (jeśli nie wiecie która to, sprawdźcie w pliku wp-config.php w folderze głównym poprzez ftp Waszego serwera. Następnie z poziomu phpMyadmina klikamy napis export i Wykonaj.

Zapisujemy wyeksportowany plik na dysku w bezpiecznym miejscu.

 

Teraz przechodzimy do części zasadniczej.

wordpress-reset-privillages-access-rolesSzukamy w lewym menu tabeli o nazwie wp_options (w moim przypadku nazwa jest inna niż wp_, więc została ona wycięta). Następnie szukamy rekordu o nazwie wp_user_roles. Tutaj najlepiej wylistować wszystkie rekordy (w nagłówku standardowo jest ich 30).

Klikamy na ikonę ołówka. Z prawej strony pojawi się duże okno, gdzie aktualnie wpisane bezedeury wpisujemy:

a:5:{s:13:"administrator";a:2:{s:4:"name";s:13:"Administrator";s:12:"capabilities";a:61:{s:13:"switch_themes";b:1;s:11:"edit_themes";b:1;s:16:"activate_plugins";b:1;s:12:"edit_plugins";b:1;s:10:"edit_users";b:1;s:10:"edit_files";b:1;s:14:"manage_options";b:1;s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:6:"import";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:8:"level_10";b:1;s:7:"level_9";b:1;s:7:"level_8";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;s:12:"delete_users";b:1;s:12:"create_users";b:1;s:17:"unfiltered_upload";b:1;s:14:"edit_dashboard";b:1;s:14:"update_plugins";b:1;s:14:"delete_plugins";b:1;s:15:"install_plugins";b:1;s:13:"update_themes";b:1;s:14:"install_themes";b:1;s:12:"manage_roles";b:1;s:15:"manage_database";b:1;s:12:"manage_email";b:1;s:12:"manage_polls";b:1;s:11:"simple_tags";b:1;s:17:"admin_simple_tags";b:1;s:14:"manage_ratings";b:1;}}s:6:"editor";a:2:{s:4:"name";s:6:"Editor";s:12:"capabilities";a:35:{s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;s:11:"simple_tags";b:1;}}s:6:"author";a:2:{s:4:"name";s:6:"Author";s:12:"capabilities";a:10:{s:12:"upload_files";b:1;s:10:"edit_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:4:"read";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;s:22:"delete_published_posts";b:1;}}s:11:"contributor";a:2:{s:4:"name";s:11:"Contributor";s:12:"capabilities";a:5:{s:10:"edit_posts";b:1;s:4:"read";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;}}s:10:"subscriber";a:2:{s:4:"name";s:10:"Subscriber";s:12:"capabilities";a:2:{s:4:"read";b:1;s:7:"level_0";b:1;}}}

Klikamy ‚zapisz/save’.

Gratulacje – jeśli nie było błędów – przywróciłeś role i dostępy do ustawień standardowych.
Teraz zaloguj się na dane stworzonego przez siebie użytkownika i ustaw właściwemu administratorowi rolę ‚Administrator’.

I voila!

Aby boty szybciej odwiedzały Wasze strony – możecie im pomóc, umieszczając poniższą listę w panelu administracyjnym WordPressa (w lokalizacji waszadomena/wp-admin/options-writing.php):


http://api.my.yahoo.co.jp/RPC2
http://audiorpc.weblogs.com/RPC2
http://blogpeople.net/ping
http://blogpeople.net/servlet/weblogUpdates
http://blogpingr.de/ping/rpc2
http://blogsearch.google.ae/ping/RPC2
http://blogsearch.google.at/ping/RPC2
http://blogsearch.google.be/ping/RPC2
http://blogsearch.google.bg/ping/RPC2
http://blogsearch.google.ca/ping/RPC2
http://blogsearch.google.ch/ping/RPC2
http://blogsearch.google.cl/ping/RPC2
http://blogsearch.google.co.cr/ping/RPC2
http://blogsearch.google.co.hu/ping/RPC2
http://blogsearch.google.co.id/ping/RPC2
http://blogsearch.google.co.il/ping/RPC2
http://blogsearch.google.co.in/ping/RPC2
http://blogsearch.google.co.it/ping/RPC2
http://blogsearch.google.co.jp/ping/RPC2
http://blogsearch.google.co.ma/ping/RPC2
http://blogsearch.google.com.ar/ping/RPC2
http://blogsearch.google.com.au/ping/RPC2
http://blogsearch.google.com.br/ping/RPC2
http://blogsearch.google.com.co/ping/RPC2
http://blogsearch.google.com.do/ping/RPC2
http://blogsearch.google.com.mx/ping/RPC2
http://blogsearch.google.com.my/ping/RPC2
http://blogsearch.google.com.pe/ping/RPC2
http://blogsearch.google.com/ping/RPC2
http://blogsearch.google.com/ping/RPC2
http://blogsearch.google.com.sa/ping/RPC2
http://blogsearch.google.com.sg/ping/RPC2
http://blogsearch.google.com.tr/ping/RPC2
http://blogsearch.google.com.tw/ping/RPC2
http://blogsearch.google.com.ua/ping/RPC2
http://blogsearch.google.com.uy/ping/RPC2
http://blogsearch.google.com.vn/ping/RPC2
http://blogsearch.google.co.nz/ping/RPC2
http://blogsearch.google.co.th/ping/RPC2
http://blogsearch.google.co.uk/ping/RPC2
http://blogsearch.google.co.ve/ping/RPC2
http://blogsearch.google.co.za/ping/RPC2
http://blogsearch.google.de/ping/RPC2
http://blogsearch.google.es/ping/RPC2
http://blogsearch.google.fi/ping/RPC2
http://blogsearch.google.fr/ping/RPC2
http://blogsearch.google.gr/ping/RPC2
http://blogsearch.google.hr/ping/RPC2
http://blogsearch.google.ie/ping/RPC2
http://blogsearch.google.in/ping/RPC2
http://blogsearch.google.it/ping/RPC2
http://blogsearch.google.jp/ping/RPC2
http://blogsearch.google.lt/ping/RPC2
http://blogsearch.google.nl/ping/RPC2
http://blogsearch.google.pl/ping/RPC2
http://blogsearch.google.pt/ping/RPC2
http://blogsearch.google.ro/ping/RPC2
http://blogsearch.google.ru/ping/RPC2
http://blogsearch.google.se/ping/RPC2
http://blogsearch.google.sk/ping/RPC2
http://blogsearch.google.tw/ping/RPC2
http://blogsearch.google.us/ping/RPC2
http://blog.with2.net/ping.php
http://blog.youdao.com/ping/RPC2
http://ping.blo.gs
http://ping.blogs.yandex.ru/RPC2
http://ping.fc2.com
http://ping.feedburner.com
http://ping.pubsub.com/ping
http://ping.rss.drecom.jp
http://rpc.aitellu.com
http://rpc.blogbuzzmachine.com/RPC2
http://rpc.pingomatic.com
http://rpc.reader.livedoor.com/ping
http://rpc.twingly.com
http://rpc.weblogs.com/RPC2
http://serenebach.net/rep.cgi
http://services.newsgator.com/ngws/xmlrpcping.aspx
http://www.blogpeople.net/servlet/weblogUpdates/
http://www.blogroots.com
http://www.bloogz.com
http://www.news2paper.com/ping
http://www.pingoo.jp/ping/
http://www.ping.wordblog.de
http://www.serenebach.net/rep.cgi
http://www.veneblogs.com/ping/
http://xmlrpc.bloggernetz.de/RPC2
http://xping.pubsub.com/ping/

google maps Better WP Security issueStałym, niepoprawionym jeszcze dotąd problemem podczas implementacji Map Google jest brak możliwości ich wyświetlenia.

Dzieje się tak, kiedy próbujemy ukryć lub wyświetlić losowo wersję WP.

Wpływ na to ma np. wtyczka Better WP Security.

Problem dotyczy IE w wersji 8, w przeglądarkach Chrome, FF i Opera tego problemu nie stwierdziłem.

 

Co robić? Jak żyć?

Aby pozbyć się problemu – wystarczy odhaczyć wymuszanie zmiany wersji WP.  ustawieniach dostępnych defaultowo w lokalizacji: /wp-admin/admin.php?page=better-wp-security-systemtweaks

better wp security and google maps problem

 

I voila!


<?php //display the current and parent category (2 total)
$category = get_the_category();
$current_category = $category[0];
$parent_category = $current_category->category_parent;
if ( $parent_category != 0 ) {
echo '<a href="' . get_category_link($parent_category) . '">' . get_cat_name($parent_category) . '</a>';
}
echo '<a href="' . get_category_link($current_category) . '">' . $current_category->cat_name . '</a>';
?>



<?php
//get all categories then display all posts in each term
$taxonomy = 'category';
$param_type = 'category__in';
$term_args=array(
'orderby' => 'name',
'order' => 'ASC'
);
$terms = get_terms($taxonomy,$term_args);
if ($terms) {
foreach( $terms as $term ) {
$args=array(
"$param_type" => array($term->term_id),
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'caller_get_posts'=> 1
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) { ?>
<div class="category section">
<h3><?php echo 'Category '.$term->name;?></h3>
<ul>
<?php
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php
endwhile;
?>
</ul>
</div>
<?php
}
}
}
wp_reset_query(); // Restore global post data stomped by the_post().
?>


18 lutego odbędzie się druga, gdańska edycja WordUp w pubie Polufka (ul. Leczkowa 18, Gdańsk – zobacz na mapie).

WordPress developer at work

Już 19 stycznia w Warszawie odbędzie się kolejny WordUp.

Będzie można tam zobaczyć m.in. prezentacje:

  • Michał Żuk –  E-commerce na WordPressie
  • Jacek Ławniczak – krótko o swojej przygodzie z WP

Oczywiście oprócz prezentacji najważniejszą sprawą takich wydarzeń są rozmowy kuluarowe ;)

Krótki snippet, który rozszerza funkcję in_category, dzięki czemu możemy sprawdzić czy dany wpis znajduje się w danej kategorii lub dziecku/gałęzi potomnej kategorii:


<?php
///#################################category-expanded
function in_category_extended($category) {
// easy out
if (!(is_category() or is_single())) return false;

// retrieve specified category (ID or slug)
$obj_specified_category = is_numeric($category) ? get_category($category) : get_category_by_slug($category);
if (empty($obj_specified_category->cat_ID)) return false;

// we're viewing a category
if (is_category()) {
$current_category_ID = get_query_var('cat');
return ($obj_specified_category->cat_ID == $current_category_ID or cat_is_ancestor_of($obj_specified_category->cat_ID,$current_category_ID));
}

// we're viewing a post
else {
global $wp_query;
$obj_post = $wp_query->get_queried_object();
if (empty($obj_post->ID)) return false;

if (in_category($obj_specified_category->cat_ID, $obj_post->ID)) return true;
else return in_category(get_term_children($obj_specified_category->cat_ID, 'category'), $obj_post->ID);
}
}
///#################################category-expanded
?>

WordPress developer at work

Będąc w określonej kategorii chcemy wyświetlić wszystkie wpisy należące do niej.
Więc jedziemy – edytujemy/tworzymy plik category.php, do szablonu dodajemy następujący kod:

<ul>
<?php

$catID = get_query_var('cat');
$catName = strtolower(get_cat_name($catID));
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} elseif ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}

$myquery = new WP_Query(array(
'post_type' => 'products',
'category_name' => $catName)
);

while ( $myquery->have_posts() ) : $myquery->the_post();

$img_id = get_post_meta($post->ID,'main_image',true);
$img_url = wp_get_attachment_url($img_id);

?>

<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>

W większości przypadków automatyczne linkowanie dodawanych do WordPressa zdjęć jest upierdliwe.
Aby wymusić ignorowanie dodawanie znacznika <a href do dodawanych z poziomu wpisu lub strony załączników, robimy małą modyfikację.

W functions.php dodajemy małą funkcję:


function maniek_imagelink_setup() {
$image_set = get_option( 'image_default_link_type' );


if ($image_set !== 'none') {
update_option('image_default_link_type', 'none');
}
}
add_action('admin_init', 'maniek_imagelink_setup', 10);