Witaj gościu! Zaloguj się lub Zarejestruj aby móc korzystać ze wszystkich funkcjonalności jakie oferuje to forum! Rozpocznij zarabianie przez internet, poznaj korzysci pracy w domu! Rejestracja i korzystanie z forum jest całkowicie darmowe!
Praca w domu - Dodatkowa Praca - Zarabianie przez Internet
Poradnik
Modyfikacja WordPress bez użycia wtyczek - Wersja do druku


+- Praca w domu - Dodatkowa Praca - Zarabianie przez Internet (https://zarabiam.com)
+-- Dział: Zarządzanie stronami Internetowymi (/Forum-Zarzadzanie-stronami-Internetowymi-358)
+--- Dział: Wordpress (/Forum-Wordpress-360)
+--- Wątek:
Poradnik
Modyfikacja WordPress bez użycia wtyczek (/Temat-Modyfikacja-WordPress-bez-uzycia-wtyczek-156576)

Strony: 1 2


Modyfikacja WordPress bez użycia wtyczek - precell - 03-06-2018 21:28

[Obrazek: Wordpress-unwanted-code.jpg]

Witam szanownych użytkowników forum w moim kolejnym poradnikuSmile

Dzisiaj pokarzę dla nieuświadomionych jak zmodyfikować w łatwy sposób WP bez jakikolwiek wtyczek. Starzy wyjadacze raczej nic nowego tutaj nie znajdą, a nowym i nie świadomym użytkownikom poradnik ten pomoże uniknąć sterty niepotrzebnych wtyczek ;-) Zacznijmy od początku :-)

Prolog

Lata świetlne temu jak odkryłem WordPressa, chcą dodać jakąś pierdołę na stronę, instalowałem na jej potrzebę odpowiednią wtyczkę. W pewnym momencie tych wtyczek zrobiło się ponad 40Rolleyes Przeraziłem się okropnie, bo przecież ówcześni spece od WP pisali, że każdy plugin to obciążenie dla strony. Dzisiaj wiem, że to pół prawdy. Dobrze napisana wtyczka nie robi tego wcale lub robi to w nieznacznym stopniu. W każdym bądź razie zmotywowało mnie to do szukania innych rozwiązań. Szukałem wtyczek które by miały kilka rozwiązań w jednym, zbędne wtyczki po prostu wyrzuciłem, a resztę modyfikacji wrzuciłem prosto w kod motywu czy innych plików WP :-) Nauka nie poszła w las, nauczyłem się dłubać w WordPress, szukać okrężnych bardziej trwałych rozwiązań.

Wyobraźcie sobie sytuację. Używacie jakiejś wtyczki przez x lat. Nagle wtyczka traci wsparcie. Pół biedy jak znajdziemy jakiś odpowiednik, gorzej jak wtyczka nie ma swojego odpowiednika, a przecież nie będziemy trzymać na swoich wychuchanych stronkach nieaktualnych pluginów. Co w tedy robicie? Albo na szybkości uczycie się dłubać w WP, albo przemawiacie do portfela jakiegoś programisty ;-)
Dobra koniec marudzenia, przechodzimy do rzeczy ;-)

Zanim zacznę, informuje, że wszelkie modyfikacje robicie na własną odpowiedzialność. Za wszelkie szkody wynikłe na waszych stronach nie ponoszę odpowiedzialność. Krótko mówiąc zróbcie sobie backup bazy danych i wszystkich plików zanim zaczniecie kombinować :-).

Wszelkie modyfikacje oparte o motyw polecam robić na tak zwanym motywie potomnym. Nie będę pisał co to jest, odsyłam do źródła:
https://codex.wordpress.org/Child_Themes
Dokumentacja WP trochę komplikuje, więc jak ktoś nie ogarnie, pisać w tym temacie, pomogę :-) Niektóre theme nie obsługują tego cudownego wynalazku. Miałem niefart korzystać z takiego ustrojstwa2

wp-config.php

Zaczniemy od modyfikacji wp-config.php, plik ten znajduje się w katalogu głównym naszej strony. Zakładam, że macie zrobioną co najmniej kopie tego pliku w razie komplikacji!

WordPress domyślnie okresowo zapisuje kopie wpisu podczas jego edycji, oraz przy każdym kliknięciu, "zaktualizuj", "zapisz szkic". Jak łatwo się domyślić taka opcja szybko może nam zapchać bazę danych. Na szczęście kopie te można ograniczyć a nawet wyłączyć. Do pliku wklejamy poniższy fragment kodu:
Kod PHP:
define('WP_POST_REVISIONS'false); 
Całkowicie wyłącza kopie wpisów.
Kod PHP:
define('WP_POST_REVISIONS'3); 
Ogranicza wersje wpisów do 3 kopi.
Kod polecam w kleić pod linijką:
Kod:
define('WP_DEBUG', false);
Podobno jeśli powyższe linijki wkleimy na samym dole pliku, kod nie zadziała. Nie wiem, nie sprawdzałem.

Gdy korzystamy z wtyczki cache, lub z obiektowego cache, w pliku powinna się znaleźć linijka:
Kod PHP:
define('WP_CACHE'true); 
Osobiście wklejam ten fragment tuż pod:
Kod PHP:
<?php 

functions.php

Teraz będziemy korzystać z naszego wcześniej utworzonego motywu potomnegoHuh Dzięki takiemu zabiegowi, przy każdej aktualizacji motywu głównego nie będziemy musieli na nowo modyfikować wcześniej zmienionych plików. Aczkolwiek tutaj też zdarzają się wyjątki od reguły ;-)
Poniższe modyfikacje wklejamy na końcu pliku przed fragmentem kodu:
Kod PHP:
?>

Zmiana domyślnego obrazka - Gravatar:
Kod PHP:
add_filter'avatar_defaults''wpb_new_gravatar' );
function 
wpb_new_gravatar ($avatar_defaults) {
$myavatar 'http://moja-domena.pl/link-do-obrazka.png';
$avatar_defaults[$myavatar] = "Default Gravatar";
return 
$avatar_defaults;

W przykładzie podałem ścieżkę bezwzględną do obrazka, ale osobiście zalecam w razie zmiany domeny używania ścieżek względnych.
Czyli zamieniamy http://moja-domena.pl/link-do-obrazka.png na /link-do-obrazka.png. Jeśli nasza strona ma odpalony protokół SSL, http:// zamieniamy na https:// w przypadku ścieżki bezwzględnej.

Ikony wpisów w kanale RSS
Jeżeli nasz moty nie obsługuje ikon wpisów w kanale RSS, do pliku dodajemy poniższy kod:
Kod PHP:
function rss_post_thumbnail($content) {
global 
$post;
if(
has_post_thumbnail($post->ID)) {
$content '<p>' get_the_post_thumbnail($post->ID) .
'</p>' get_the_content();
}
return 
$content;
}
add_filter('the_excerpt_rss''rss_post_thumbnail');
add_filter('the_content_feed''rss_post_thumbnail'); 

Obsługa shortcode w widgetach tekstowych
Kod PHP:
add_filter('widget_text''do_shortcode'); 

Dodanie kategorii i tagów dla stron
Nie wiem, po co to komu, ale dodaje jako ciekawostkę ;-)
Kod PHP:
// add tag and category support to pages
function tags_categories_support_all() {
  
register_taxonomy_for_object_type('post_tag''page');
  
register_taxonomy_for_object_type('category''page');  
}
 
// ensure all tags and categories are included in queries
function tags_categories_support_query($wp_query) {
  if (
$wp_query->get('tag')) $wp_query->set('post_type''any');
  if (
$wp_query->get('category_name')) $wp_query->set('post_type''any');
}
 
// tag and category hooks
add_action('init''tags_categories_support_all');
add_action('pre_get_posts''tags_categories_support_query'); 

Wyświetlenie daty ostatniej aktualizacji wpisu
Ciekawa opcja jeżeli często aktualizujecie wcześniej dodane wpisy.
Kod PHP:
function wpb_last_updated_date$content ) {
$u_time get_the_time('U'); 
$u_modified_time get_the_modified_time('U'); 
if (
$u_modified_time >= $u_time 86400) { 
$updated_date get_the_modified_time('F jS, Y');
$updated_time get_the_modified_time('h:i a'); 
$custom_content .= '<p class="last-updated">Ostatnia aktualizacja '$updated_date ' at '$updated_time .'</p>';  

 
    
$custom_content .= $content;
    return 
$custom_content;
}
add_filter'the_content''wpb_last_updated_date' ); 

Tutaj jeszcze wspomnę, że dwie poniższe linie odpowiadają za czas:
Kod PHP:
$updated_date get_the_modified_time('F jS, Y');
$updated_time get_the_modified_time('h:i a'); 
Pierwsza linijka za dzień, miesiąc, rok. Druga za godzinę. Jak ktoś działa pod PL, warto te dwie linijki zmienić pod polskie realia. Amerykanie wpisują najpierw miesiąc, dzień, rok i zegar 12 godziny. U nas zaś wpisujemy zazwyczaj dzień, miesiąc, rok zegar 24 godzinny.
Jak to zmodyfikować, odsyłam do źródła:
https://codex.wordpress.org/Formatting_Date_and_Time

Usuniecie ze źródła strony wersji naszego WordPressa
Kod PHP:
function wpbeginner_remove_version() {
return 
'';
}
add_filter('the_generator''wpbeginner_remove_version'); 

.htaccess

Plik ten znajduje się w katalogu głównym twojej strony. Koniecznie zrób jego kopię przed modyfikacją.

Włączenie pamięci podręcznej przeglądarki dla naszej strony
Na końcu pliku dodajemy:
Kod:
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
    ExpiresByType text/html "access plus 1 seconds"
    ExpiresByType image/gif "access plus 30 days"
    ExpiresByType image/jpeg "access plus 30 days"
    ExpiresByType image/png "access plus 30 days"
    ExpiresByType image/jpg "access plus 30 days"
    ExpiresByType image/svg+xml "access plus 30 days"
    ExpiresByType text/css "access plus 30 days"
    ExpiresByType text/javascript "access plus 30 days"
    ExpiresByType application/javascript "access plus 30 days"
    ExpiresByType application/x-javascript "access plus 30 days"
    ExpiresByType text/xml "access plus 60 minutes"
</IfModule>
Poszczególne parametry możemy modyfikować wedle potrzeb.

Na razie tyle. Temat będę aktualizował na bieżąca jak tylko coś mi się przypomni :-)

Macie jakieś pytania? Walcie śmiało :-) Korzystacie z modyfikacji nie wymienionych przeze mnie? Również zapraszam do tematu :-)

Zauważyliście jakiś błąd? Dzwońcie nawet o 3 w nocyCool


RE: Modyfikacja WordPress bez użycia wtyczek - Hoolig4n - 04-06-2018 01:09

Bardzo dobry poradnik, @[precell] zna się na rzeczy- raz miałem okazję skorzystać z jego pomocy na PW, która okazała się nieoceniona impreza


RE: Modyfikacja WordPress bez użycia wtyczek - amidalez - 07-08-2018 17:45

Fajne tipy i bardzo przydatne. Po latach działania na joomli naprawdę pokochałam Wordpress. Ale katalog małych usprawnień warto zbierać


RE: Modyfikacja WordPress bez użycia wtyczek - precell - 07-08-2018 19:38

(07-08-2018 17:45)amidalez napisał(a):  Fajne tipy i bardzo przydatne. Po latach działania na joomli naprawdę pokochałam Wordpress. Ale katalog małych usprawnień warto zbierać

Lata temu joomla jakoś mi nie pod pasowała, za bardzo skomplikowana była, nie wiem jak jest teraz.

Na szczęście szybko odkryłem WP, który jest na tyle uniwersalny, że można na nim postawić dosłownie wszystko.


RE: Modyfikacja WordPress bez użycia wtyczek - precell - 13-03-2019 20:24

Jakiś czas temu wymyśliłem sobie, że jedna z moich stron będzie dwujęzyczna. Niestety zestaw SEO Yoast + WPML spowodował, że WP zaczął ignorować kod HTML w opisach kategorii i tagów. Oczywiście mógłbym ten problem rozwiązać kolejną wtyczką. Ale, że w tym temacie pluginom mówimy nie, poniżej przedstawiam rozwiązanie bez wtyczkowe.

Kod wklejamy w plik functions.php, oczywiście w motywie potomnym :-)

Kod PHP:
/**
 * Allow HTML in term (category, tag) descriptions
 */
foreach ( array( 'pre_term_description' ) as $filter ) {
    
remove_filter$filter'wp_filter_kses' );
}
 
foreach ( array( 
'term_description' ) as $filter ) {
    
remove_filter$filter'wp_kses_data' );


Źródło rozwiązania:
https://docs.woocommerce.com/document/allow-html-in-term-category-tag-descriptions/


RE: Modyfikacja WordPress bez użycia wtyczek - rachman - 13-03-2019 20:30

Dopiero zauważyłem Twój a właśnie piszę poradnik dla kogoś, zobaczymy czy czegoś nie znałem Wink


RE: Modyfikacja WordPress bez użycia wtyczek - precell - 13-03-2019 20:36

@[rachman]

Chętnie poczytam o rozwiązaniach, których nie ma w tym temacie :-)


RE: Modyfikacja WordPress bez użycia wtyczek - rachman - 13-03-2019 20:40

Jak skończę to podrzucę gotowca jeśli nie zapomnę ale to potrwa - piszę parę rzeczy na raz więc wiesz... Wink
Z tym, że ja skupiam się na kwestiach zabezpieczeń także będzie to trochę inna history z tego co widzę Wink

edit:
Odnośnie: "Usuniecie ze źródła strony wersji naszego WordPressa" - sama ta formułka nie usuwa wersji WP zewsząd. WP wrzuca wersję w kilku miejscach. Niemniej pod względem bezpieczeństwa jest to nie takie znaczące bo boty w większości nie sprawdzają wersji CMSa a po prostu testują na konkretne luki.


RE: Modyfikacja WordPress bez użycia wtyczek - precell - 22-04-2019 11:33

Rozwiązanie z poniższego tematu:
https://zarabiam.com/Temat-Pogrupowana-lista-tagow-161399

Żeby z korzystać z poniższego rozwiązania, musicie sobie stworzyć niestandardowy szablon dla stron i tam w klepać kod php. Następnie tworzycie sobie stronę, np. tagi i wybieracie wcześniej stworzony szablon.

Jak stworzyć niestandardowy szablon? Poniższej macie prosty przykład:
https://www.wp-lab.pl/2018/jak-utworzyc-nowy-szablon-dla-podstrony-w-wordpress/

Kod CSS to tylko przykład, który zastosowałem na mojej stronie.

Kod PHP:
<!--Lista tagów-->
<
div class="tag-lista">
<?
php $list '';
$groups = array();
$tags get_tags();
if( 
$tags && is_array$tags ) ) {
    foreach( 
$tags as $tag ) {
        
$first_letter strtoupper$tag->name[0] );
        
$groups$first_letter ][] = $tag;
    }
    if( !empty( 
$groups ) ) {
        foreach( 
$groups as $letter => $tags ) {
            
$list .= "<div><h3>" $letter "</h3><ul>";
            foreach( 
$tags as $tag ) {
                
$list .= '<li><a href="' get_tag_link$tag->term_id ) . '" title="' sprintf__"View all posts in %s" ), $tag->name ) . '" ' '>' $tag->name.'</a> ('.$tag->count.')</li>';
            }
            
$list .= '</ul></div>';
        }
        
$list .= '';
    }
}
echo 
$list;
?>    
</div>
<!-- Koniec listy tagów--> 

Kod:
/*Lista tagów*/
.tag-lista {
    display: flex;
    flex-wrap: wrap;
}

.tag-lista div {
    display: flex;
    flex-direction: column;
}

div.tag-lista div h3 {
    border-bottom: 1px solid;
    margin-right: 10px;
    width: 120px;
}

div.tag-lista div ul {
    padding: 0;
    margin-right: 5px;
    list-style: none;
}

Efekt końcowy:

[Obrazek: Tagi.jpg]


RE: Modyfikacja WordPress bez użycia wtyczek - perso - 17-06-2019 09:44

Fajny poradnik, brakuje mi tu tylko małego wtajemniczenia odnośni modyfikacji i tworzenia samych wtyczek, jak działa ich modułowość itd.