
7 grzechów głównych twórców motywów (okiem programisty)
WordCamp Kraków 2015: Mity (nie)bezpieczenstwa
A prezentacja dostępna tutaj:
Mity (nie)bezpieczenstwa
Jak przetworzyć dane przesłane formularzem ContactForm7
ContactForm7 to chyba najpopularniejsza wtyczka do łatwego tworzenia formularzy, które można umieścić na stronie. Nie jest ona co prawda najwygodniejsza, najładniejsza, ani najbardziej intuicyjna, ale z pewnością jest szybka, bezpieczna i spełnia swoją rolę. A co więcej – dzięki przemyślanemu użyciu filtrów i akcji, pozwala na łatwe modyfikacje i integracje.
Zacznijmy od najprostszej i chyba najczęściej spotykanej modyfikacji, czyli:
Jak zrobić coś dodatkowego (zapisać do pliku, zachować w bazie danych, utworzyć wpis, itd.) z przesłanym formularzem?
Dzięki temu, że autor wtyczki przewidział taką możliwość, dodanie takiej integracji jest stosunkowo proste. Spójrzmy na poniższy kod, który realizuje chyba najprostszą formę takiej integracji, a jednocześnie jest świetnym startem do budowania swoich, bardziej rozbudowanych wersji:
function prefiks_process_submitted_form_data( $contact_form ) {
$submission = WPCF7_Submission::get_instance();
if ( $submission ) {
// Pobierz dane przesłane w formularzu
$submitted_name = $submission->get_posted_data('your-name');
$submitted_email = $submission->get_posted_data('your-email');
$submitted_subject = $submission->get_posted_data('your-subject');
$submitted_message = $submission->get_posted_data('your-message');
// ...
// Zrób coś z danymi (np. zapisz je do pliku)
file_put_contents('cf7-log.txt', 'Data: ' . date('c') . "\n", FILE_APPEND);
file_put_contents('cf7-log.txt', "Autor: {$submitted_name} <{$submitted_email}>\n", FILE_APPEND);
file_put_contents('cf7-log.txt', 'Temat: ' . $submitted_subject . "\n", FILE_APPEND);
file_put_contents('cf7-log.txt', "Wiadomość:\n" . $submitted_message, FILE_APPEND);
file_put_contents('cf7-log.txt', "\n--------------------\n", FILE_APPEND);
}
}
add_action( 'wpcf7_before_send_mail', 'prefiks_process_submitted_form_data' );
WordUp Kraków #jesień 2015: Bezpieczny kod – Trzy nieco trudniejsze kawałki
A prezentacja dostępna tutaj:
Bezpieczny kod: trzy łatwe kawałki
Wyczaruj sobie spokój
Bezpieczny kod – Trzy nieco trudniejsze kawałki
Mity (nie)bezpieczeństwa
Jak wyświetlić różną liczbę wpisów na różnych stronach?
Tym razem pytanie od znajomego otrzymane bezpośrednio. Mam jednak wrażenie, że z tym problemem spotkać można się dość często, a dotyczy ono modyfikowania liczby wpisów wyświetlanych na stronie w zależności od tego, na jakiej stronie aktualnie jesteśmy. Ale po kolei – zacznijmy od pytania:
Na stronie głównej 4 wpisy wyświetlam w sliderze, a potem resztę normalnie. Co zrobić, żeby paginacja działała poprawnie?
Podejrzewam, że przyda się kilka dodatkowych wyjaśnień. Na czym dokładnie polegał problem? Otóż na stronie listy wpisów wyświetlane było po 9 wpisów. Na stronie głównej bloga, wyświetlać miał się slider, a w nim 4 najnowsze wpisy, a poniżej 9 następnych wpisów (razem 13). Gdy przechodziliśmy na stronę drugą, to niektóre wpisy wyświetlały się ponownie.
Jak to naprawić? Prosto – musimy wytłumaczyć WordPressowi, ile wpisów gdzie chcemy wyświetlać. A możemy to zrobić tak:
function prefiks_change_posts_number_on_home( $query ) {
if ( is_home() && $query->is_main_query() ) {
$posts_per_page = get_query_var('posts_per_page', get_option('posts_per_page')); // <- domyślna liczba wpisów do wyświetlenia
$additional_posts = 4; // <- liczba dodatkowych wpisów na pierwszej stronie
if ( get_query_var('paged') < 2 ) {
$query->set( 'posts_per_page', $posts_per_page + $additional_posts );
} else {
$query->set( 'offset', $additional_posts + ( get_query_var( 'paged' ) - 1 ) * $posts_per_page );
}
}
}
add_action( 'pre_get_posts', 'prefiks_change_posts_number_on_home' );
Jak zmienić domyślne ustawienia galerii?
Dzisiaj na jednej z grup supoprtowych pojawiło się następujące pytanie:
Czy da się jakoś zmienić domyślne ustawienia galerii? Chciałbym mieć na start ustawione 4 kolumny oraz linkowanie do pliku, a nie strony załącznika.
No właśnie, da się? Oczywiście, że się da, a potrzebujemy w tym celu poniższych dwóch funkcji:
function prefiks_print_media_templates() {
?>
<script>
jQuery(document).ready(function() {
_.extend(wp.media.galleryDefaults, {
columns: '4',
link: 'file',
});
});
</script>
<?php
}
add_action('print_media_templates', 'prefiks_print_media_templates');
function prefiks_shortcode_atts_gallery($out, $pairs, $atts) {
if ( ! array_key_exists('columns', $atts) || ! intval( $atts['columns'] ) ) {
$out['columns'] = 4;
}
if ( ! array_key_exists('link', $atts) ) {
$out['link'] = 'file';
}
return $out;
}
add_filter('shortcode_atts_gallery', 'prefiks_shortcode_atts_gallery', 10, 3);