Title: Shortcode
Last modified: 2017-07-10

---

# Shortcode

 *  [damian0021](https://pl.wordpress.org/support/users/damian0021/)
 * (@damian0021)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/)
 * Witajcie,
 * mam mały problem. Napisałem sobie mały skrypcik, który umieściłem w pliku bufor.
   php (dane podmieniane są w locie, includuje plik w header.php) – wiem, że to 
   niebezpieczne, ale znacznie przyspiesza mi to pracę.
 * Działanie skryptu polega na tym, że przechodzi po danej stronie, jeżeli znajdzie
   w kolumnie A „ABC”, to w kolumnie B – wrzuci mi to co zdeklarowałem w tablicy.
   Skrypt działa, wszystko się ładnie wyszukuje i podmienia.
 * Jednak gdy wrzucam już shortcode np. [offers url=’/laptop/’] do tablicy, niestety
   skrypt wrzuca to jako string, a shortcode się nie odpala.
 * Ktoś ma jakiś pomysł jak zrobić, aby dany shortcode zaczął działać? Gdy wrzucę
   ten sam shortcode z poziomu WP (strona/wpis) – wszystko generuje się jak powinno.

Zobacz 15 odpowiedzi - od 1 do 15 (z 19 łącznie)

1 [2](https://pl.wordpress.org/support/topic/shortcode-2/page/2/?output_format=md)
[→](https://pl.wordpress.org/support/topic/shortcode-2/page/2/?output_format=md)

 *  Moderator [amistad18](https://pl.wordpress.org/support/users/amistad18/)
 * (@amistad18)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65220)
 * > [Home](https://developer.wordpress.org/)
 * Więcej bez pokazania kodu nie pomożemy.
 *  Twórca wątku [damian0021](https://pl.wordpress.org/support/users/damian0021/)
 * (@damian0021)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65225)
 *     ```
       function w_callback($b)
   
       // tablica do podmian
       $name_and_link_arr = array(
       	'abc' => 'cztery hb',
       	'laptop' => '[offers url=’/laptop/’] '
       );
   
       preg_match_all('~<td class=".*(?=\sbulb")\sbulb">([^<]*)</td>\s*<td class=".*(?=\soffer")\soffer">([^<]*)</td>~Usmi', $b, $matches);
   
       $matches_len = count($matches[0]);
   
       for ($i = 0; $i <= $matches_len; $i++) { 
       	if (array_key_exists($matches[1][$i], $name_and_link_arr)) {
       		$b = preg_replace('~link~Usmi', $name_and_link_arr[$matches[1][$i]], $b,1);
   
   
       return $b;
       ```
   
 *  Moderator [amistad18](https://pl.wordpress.org/support/users/amistad18/)
 * (@amistad18)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65237)
 * To jest kod z bufor.php? Chciał bym zobaczyć bufor.php, header.php i kod z użyciem
   tej funkcji, te kawałki z niedziałającym shortcodem też.
 * Rozumiem że skrypt podmienia linki z każdym odświeżeniem strony? Czy napisałeś
   sobie skrypt do jednorazowej aktualizacji treści? Masz jakiegoś linka gdzie to
   działa online?
 *  Twórca wątku [damian0021](https://pl.wordpress.org/support/users/damian0021/)
 * (@damian0021)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65244)
 * Proszę bardzo:
 * plik bufor.php :
 *     ```
       <?php
   
       function w_callback($b){
   
       // tablica do podmian
       $name_and_link_arr = array(
       	'HB4' => 'cztery hb',
       	'H7' => '[nokaut-offers-box url=\'/hb4/\' template=\'list\' limit=\'10\' render_type=\'inline\']'
       );
   
   
       // złapanie dopasowań
       preg_match_all('~<td class=".*(?=\sbulb")\sbulb">([^<]*)</td>\s*<td class=".*(?=\soffer")\soffer">([^<]*)</td>~Usmi', $b, $matches);
   
       // wyliczenie długości tablicy
       $matches_len = count($matches[0]);
   
       // podmiany w pętli
       for ($i = 0; $i <= $matches_len; $i++) { 
       	if (array_key_exists($matches[1][$i], $name_and_link_arr)) {
       		$b = preg_replace('~ytaus~Usmi', $name_and_link_arr[$matches[1][$i]], $b,1);
   
   
       return $b;
       }
       }
       }
       if(stristr($_SERVER['REQUEST_URI'],'wp-admin')===false) ob_start('w_callback');
       ?>
       ```
   
 * plik header.php rozpoczyna się:
 *     ```
       <?php
       @include_once('opta.php'); 
       ```
   
 * Online wersja testowa: [http://seowars.cba.pl/](http://seowars.cba.pl/)
 * Gdy będzie trzeba podam dane do FTP.
 *  Twórca wątku [damian0021](https://pl.wordpress.org/support/users/damian0021/)
 * (@damian0021)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65245)
 * Proszę bardzo:
 * plik bufor.php :
 *     ```
       <?php
   
       function w_callback($b){
   
       // tablica do podmian
       $name_and_link_arr = array(
       	'HB4' => 'cztery hb',
       	'H7' => '[nokaut-offers-box url=\'/hb4/\' template=\'list\' limit=\'10\' render_type=\'inline\']'
       );
   
   
       // złapanie dopasowań
       preg_match_all('~<td class=".*(?=\sbulb")\sbulb">([^<]*)</td>\s*<td class=".*(?=\soffer")\soffer">([^<]*)</td>~Usmi', $b, $matches);
   
       // wyliczenie długości tablicy
       $matches_len = count($matches[0]);
   
       // podmiany w pętli
       for ($i = 0; $i <= $matches_len; $i++) { 
       	if (array_key_exists($matches[1][$i], $name_and_link_arr)) {
       		$b = preg_replace('~ytaus~Usmi', $name_and_link_arr[$matches[1][$i]], $b,1);
   
   
       return $b;
       }
       }
       }
       if(stristr($_SERVER['REQUEST_URI'],'wp-admin')===false) ob_start('w_callback');
       ?>
       ```
   
 * plik header.php rozpoczyna się:
 *     ```
       <?php
       @include_once('opta.php'); 
       ```
   
 * Online wersja testowa: [http://seowars.cba.pl/](http://seowars.cba.pl/)
 * Gdy będzie trzeba podam dane do FTP.
    -  Ta odpowiedź została zmodyfikowana 8 lat, 9 miesięcy temu przez [amistad18](https://pl.wordpress.org/support/users/amistad18/).
 *  Twórca wątku [damian0021](https://pl.wordpress.org/support/users/damian0021/)
 * (@damian0021)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65246)
 * Kod z pliku bufor.php masz powyżej,
    Kod pliku header.php rozpoczyna się:
 *     ```
       <?php
       @include_once('bufor.php'); 
       ```
   
 * Shortcode jest shortcodem PP Nokaut.
 * Tutaj masz online (wersja testowa) : seowars.cba.pl
    -  Ta odpowiedź została zmodyfikowana 8 lat, 9 miesięcy temu przez [amistad18](https://pl.wordpress.org/support/users/amistad18/).
 *  Moderator [amistad18](https://pl.wordpress.org/support/users/amistad18/)
 * (@amistad18)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65250)
 * Czyli dobrze rozumiem że całą treść strony jedziesz preg_match_all()?
 * To nie ma szans zadziałać, gdyż Ty otrzymujesz już wygenerowany przez PHPa kod
   HTML, do którego próbujesz dodać shortcoda, którego PHP by pewnie i tak już poprawnie
   nie wygenerował – ale nawet gdyby, to jest już po fakcie.
 * Zamiast:
    `$b = preg_replace('~ytaus~Usmi', $name_and_link_arr[$matches[1][$i]],
   $b,1);`
 * Mógł byś spróbować coś w stylu:
 *     ```
       $shortcode = do_shortcode( $name_and_link_arr[$matches[1][$i]], false );
       $b = preg_replace('~ytaus~Usmi', $shortcode, $b,1);
       ```
   
 * `do_shortcode` jak wrzucisz zwykłego stringa zwróci Ci go dalej jako string, 
   ale shortcoda powinien wygenerować. Jednakże to raczej nie jest dobry sposób.
 * Lektura:
    [https://codex.wordpress.org/Plugin_API#Filters](https://codex.wordpress.org/Plugin_API#Filters)
 * Jak wolisz coś po polsku to po prostu pogooglaj WordPress filtry, najlepiej coś
   z przykładami, wtedy od razu skumasz jakie filtry są fajne i że są idealne pod
   Twoje potrzeby.
 * [https://codex.wordpress.org/Plugin_API/Filter_Reference/the_content](https://codex.wordpress.org/Plugin_API/Filter_Reference/the_content)
 * Dlatego kombinujesz coś takiego:
 *     ```
       function filter_the_content_callback( $content ){
   
       // tablica do podmian
       .
       .
       .
       $content = preg_replace('~ytaus~Usmi', $name_and_link_arr[$matches[1][$i]], $b,1);
   
       return $content ;
   
       }
   
       add_filter ( 'the_content', 'filter_the_content_callback', 10 );
       ```
   
 * Podpinasz się pod the_content, bo widzę że i tak filtrujesz tak naprawdę treść
   wpisów/stron. Pamiętaj aby jako priorytet dać coś mniejszego niż 11, gdyż domyślnie
   do_shortcode jest ustawione na the_content z priorytetem 11, więc Ty swoje shortcody
   musisz dodać szybciej aby były wygenerowane, albo robisz coś w ten deseń:
 *     ```
       remove_filter( 'the_content', 'do_shortcode', 11 );
       add_filter ( 'the_content', 'filter_the_content_callback', 20 );
       add_filter( 'the_content', 'do_shortcode', 30 );
       ```
   
 * Cały kod wrzucasz albo do wtyki, i zapominasz o pliku bufor.php i jego includowaniu,
   wystarczy włączyć wtykę.
    -  Ta odpowiedź została zmodyfikowana 8 lat, 9 miesięcy temu przez [amistad18](https://pl.wordpress.org/support/users/amistad18/).
    -  Ta odpowiedź została zmodyfikowana 8 lat, 9 miesięcy temu przez [amistad18](https://pl.wordpress.org/support/users/amistad18/).
 *  Twórca wątku [damian0021](https://pl.wordpress.org/support/users/damian0021/)
 * (@damian0021)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65254)
 * To już chyba za gruby temat dla mnie, czy gdybym dał Ci dostepy do FTP’a, zerknąłbyś
   mi na to?
 *  Moderator [amistad18](https://pl.wordpress.org/support/users/amistad18/)
 * (@amistad18)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65257)
 * Jaki gruby temat, sam napisałeś kod z bufor.php? Wystarczy że to przerobisz wedle
   mojego kodu, wrzucisz do plugins, doklejisz 5 link nagłówka dla wtyczki i gotowe.
 *  Twórca wątku [damian0021](https://pl.wordpress.org/support/users/damian0021/)
 * (@damian0021)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65267)
 * No to tak, rozumiem, że to ma wyglądać tak:
 *     ```
       function filter_the_content_callback( $content ){
       // tablica do podmian
       $name_and_link_arr = array(
           'HB4' => 'cztery hb',
           'H7' => '[nokaut-offers-box url=\'/oswietlenie-samochodu/produkt:żarówka-H1--najczesciej-oferowane.html\' template=\'box\' limit=\'3\' render_type=\'inline\']'
       );
   
   
       // złapanie dopasowań
       preg_match_all('~<td class=".*(?=\sbulb")\sbulb">([^<]*)</td>\s*<td class=".*(?=\soffer")\soffer">([^<]*)</td>~Usmi', $content, $matches);
   
       // wyliczenie długości tablicy
       $matches_len = count($matches[0]);
   
       $content = preg_replace('~ytaus~Usmi', $name_and_link_arr[$matches[1][$i]], $content,1);
   
       return $content ;}
       remove_filter( 'the_content', 'do_shortcode', 11 ); 
       add_filter ( 'the_content', 'filter_the_content_callback', 20 ); 
       add_filter( 'the_content', 'do_shortcode', 30 ); 
       ```
   
 * Jeżeli tak to niestety nie działa (ale coś się dzieje). Kod dodaje w pliku functions.
   php lub w pliku nokaut-offers-box/nokaut-offers-box.php odpowiadający za wtyczkę.
 * Gdy wrzucam kod i odświeżę stronę w polu gdzie było H6 -> ytaus -> znika napis'
   ytaus’ i zostaje puste pole.
 * A czy wyrażenie preg_match_all łapie dobrze, tak wygląda kod :
 *     ```
       <td class="light-main-bulb bulb">H6</td>
       		<td  class="light-main-bulb-offer offer">ytaus</td>
       ```
   
 * W każdej innej klasie powtarza się 'bulb’ 'offer’.
    -  Ta odpowiedź została zmodyfikowana 8 lat, 9 miesięcy temu przez [damian0021](https://pl.wordpress.org/support/users/damian0021/).
 *  Twórca wątku [damian0021](https://pl.wordpress.org/support/users/damian0021/)
 * (@damian0021)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65270)
 * Dobra, coś tam działa:
 * Mój kod to:
 *     ```
       function filter_the_content_callback( $content ){
       // tablica do podmian
       $name_and_link_arr = array(
           'H2' => '[nokaut-offers-box url=\'/sprzet-agd\' template=\'box\' limit=\'3\' render_type=\'inline\']',
           'H3' => '[nokaut-offers-box url=\'/wyciskarki/\' template=\'box\' limit=\'3\' render_type=\'inline\']',
       );
       // złapanie dopasowań
       preg_match_all('~<td class=".*(?=\sbulb")\sbulb">([^<]*)</td>\s*<td class=".*(?=\soffer")\soffer">([^<]*)</td>~Usmi', $content, $matches);
       // wyliczenie długości tablicy
       $matches_len = count($matches[0]);
       for ($i = 0; $i <= $matches_len; $i++) { 
           if (array_key_exists($matches[1][$i], $name_and_link_arr))
       $content = preg_replace('~ytaus~Usmi', $name_and_link_arr[$matches[1][$i]], $content,1);
       return $content ;
       }
       }
       remove_filter( 'the_content', 'do_shortcode', 11 ); 
       add_filter ( 'the_content', 'filter_the_content_callback', 20 ); 
       add_filter( 'the_content', 'do_shortcode', 30 );
       ```
   
 * Wrzucam do na samym górze w pliku odpowiadającym za wtyczkę, zresztą nie ma znaczenia
   gdy wrzucam go do functions.php też działa. Ale pojawił się kolejny problem, 
   a więc – w momencie gdy w tabeli A jest => H1 – podmienia mi wszytko na shortcode’a,
   gdy w tabeli nie ma 'H1′ to pozostaje 'ytaus’ bez podmiany.
 *  Moderator [amistad18](https://pl.wordpress.org/support/users/amistad18/)
 * (@amistad18)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65271)
 *     ```
       remove_filter( 'the_content', 'do_shortcode', 11 ); 
       add_filter ( 'the_content', 'filter_the_content_callback', 20 ); 
       add_filter( 'the_content', 'do_shortcode', 30 );
       ```
   
 * To był tylko przykład jak byś chciał albo musiał kombinować z priorytetami, jeśli
   tego nie potrzebujesz to zostaw tylko środkową linijkę.
 * Niezbyt rozumiem co masz teraz za problem z tym H1, tym bardziej że w tablicy
   masz zdefiniowane tylko H2 i H3. Jesteś pewien że preg_match_all() dobrze wszystko
   łapie?
 * A tak ogólnie, to po co to robisz? Czemu nie możesz dodać shortcode od razu w
   treści?
 * btw. jeśli nie chcesz swojej wtyki utworzyć to już lepiej zostaw ten kod w functions.
   php (jeśli to Twój motyw, bo inaczej z aktualizacją zniknie, więc albo wtyka 
   albo child theme – choć to jest funkcjonalność, więc miejsce tego kodu jest we
   wtyce a nie motywie).
 *  Twórca wątku [damian0021](https://pl.wordpress.org/support/users/damian0021/)
 * (@damian0021)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65274)
 * Mój kod wygląda tak:
 *     ```
       function filter_the_content_callback( $content ){
       // tablica do podmian
       $name_and_link_arr = array(
           'H1' => '[nokaut-offers-box url=\'/sprzet-agd\' template=\'box\' limit=\'3\' render_type=\'inline\']',
           'H3' => '[nokaut-offers-box url=\'/wyciskarki/\' template=\'box\' limit=\'3\' render_type=\'inline\']',
       );
       // złapanie dopasowań
       preg_match_all('~<td class=".*(?=\sbulb")\sbulb">([^<]*)</td>\s*<td class=".*(?=\soffer")\soffer">([^<]*)</td>~Usmi', $content, $matches);
       // wyliczenie długości tablicy
       $matches_len = count($matches[0]);
       for ($i = 0; $i <= $matches_len; $i++) { 
           if (array_key_exists($matches[1][$i], $name_and_link_arr))
       $content = preg_replace('~ytaus~Usmi', $name_and_link_arr[$matches[1][$i]], $content,1);}
       return $content ;
   
       }
   
       add_filter ( 'the_content', 'filter_the_content_callback', 20 ); 
       ```
   
 * Podmienia mi tylko 1 <td> w tabeli i tyle, do kolejnego wrzuca shortcode’a, ale
   go nie podmienia.
 * Jak daje na końcu:
 *     ```
       remove_filter( 'the_content', 'do_shortcode', 11 ); 
       add_filter ( 'the_content', 'filter_the_content_callback', 20 ); 
       add_filter( 'the_content', 'do_shortcode', 30 );
       ```
   
 * To w momencie gdy :
 * H1 -> ABC
    H2 -> CBA
 * W każdym przypadku pobiera wartość H1 i wrzuca to co ma podmienić z H1.
 *  Twórca wątku [damian0021](https://pl.wordpress.org/support/users/damian0021/)
 * (@damian0021)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65275)
 * WP_debug wrzycua mi takie coś :
 * `Notice: Undefined offset: 0 in /home/wp-content/themes/kale/functions.php on
   line 52`
 * Linia 52 to :
 * `if (array_key_exists($matches[1][$i], $name_and_link_arr))`
 *  Moderator [amistad18](https://pl.wordpress.org/support/users/amistad18/)
 * (@amistad18)
 * [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/#post-65286)
 * A jeśli wrzucisz shortcody nokautu w treść strony, więcej niż jeden, to się wszystkie
   poprawnie wygenerują?
 * I nadal nie wiem dlaczego tak kombinujesz z tym tematem.

Zobacz 15 odpowiedzi - od 1 do 15 (z 19 łącznie)

1 [2](https://pl.wordpress.org/support/topic/shortcode-2/page/2/?output_format=md)
[→](https://pl.wordpress.org/support/topic/shortcode-2/page/2/?output_format=md)

Temat ‘Shortcode’ jest zamknięty na nowe odpowiedzi.

## Tagi

 * [shortcode](https://pl.wordpress.org/support/topic-tag/shortcode/)

 * W: [Zaawansowane](https://pl.wordpress.org/support/forum/zaawansowane/)
 * 19 odpowiedzi
 * 2 uczestnik
 * Ostatnia odpowiedź od: [amistad18](https://pl.wordpress.org/support/users/amistad18/)
 * Ostatnia aktywność: [8 lat, 9 miesięcy temu](https://pl.wordpress.org/support/topic/shortcode-2/page/2/#post-65310)
 * Status: nierzwiązane

## Tematy

### Najbardziej popularne tematy

### Tematy bez odpowiedzi

### Wątki niezwiązane ze wsparciem

### Rozwiązane wątki

### Nierozwiązane tematy

### Wszystkie tematy
