Includowanie postów z innego bloga Wordpress

Na zaincludowanie postów lub ich części z innego bloga opartego o Wordpress jest przynajmniej kilka sposobów. Jednym z nich jest pobranie danych z kanału rss. Na blogu z którego pobieramy mamy możliwość ustawienia co na kanale rss będzie dostępne.
W celu dodania np. na stronie głównej paska z kilkoma ostatnimi wpisami z innego bloga możemy utworzyć w pliku functions.php naszego szablonu poniższą funkcję:

function show_last_posts($atts) {
$a = shortcode_atts( array(
'count' => 1,
'blog' => '',
), $atts );
if ($a['blog'] !="") {
$doc = new DOMDocument();
$doc->load($a['blog']);
$destinations = $doc->getElementsByTagName("description");
$i = 1;
foreach ($destinations as $destination) {
foreach($destination->childNodes as $child) {
if ($child->nodeType == XML_CDATA_SECTION_NODE) {
if ($i > $a['count'])
continue;
$image = get_first_image_url($child->textContent);
$link = get_page_url($child->textContent);
$alt = get_first_alt($child->textContent);
$echo .= '<div class="blogimage"><a href="$link" target="_blank"><img src="$image"><br>$alt </a></div>';
$i++;
}
}
}
return $echo;
}
else return "Nieprawidłowy adres bloga!";
}

Po napisaniu funkcji dodajemy jeszcze shortcode umożliwiający użycie widgetu na stronie lub we wpisie.

add_shortcode( 'show_last_posts', 'show_last_posts' );

Wywołanie funkcji za pomocą shortcodu będzie mogło wyglądać następująco:

[show_last_posts count="4" blog="http://adresblogazktoregopobieramywpisy.pl/?feed=rss2"]

Funkcje dodatkowe dzięki którym z description lub innego wybranego tagu można wydobyć interesujące nas dane mogą prezentować się następująco:

function get_first_image_url($html) {
if (preg_match('/<img.+?src="(.+?)"/', $html, $matches)) {
return $matches[1];
}
}

function get_page_url($html) {
if (preg_match('/<a.+?href="(.+?)"/', $html, $matches)) {
return $matches[1];
}
}

function get_first_alt($html) {
if (preg_match('/alt="(.+?)"/', $html, $matches)) {
return $matches[1];
}
}

Strona jako część innej strony w Wordpress

Jeżeli zajdzie potrzeba wyświetlenia konkretnej strony bezpośrednio w kodzie wordpressa możemy to zrobić w następujący sposób:

1. Tworzymy w pliku functions.php (aby zapobiec nadpisaniu funkcji przez aktualizację najlepiej jeżeli będzie to plik z funkcjami szablonu) następującą funkcję

function cn_include_content($pid) {
$thepageinquestion = get_post($pid);
$content = $thepageinquestion->post_content;
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
echo $content;
}

2. W miejscu w którym ma pojawić się strona wywołujemy funkcję z odpowiednim ip strony includeowanej
cn_include_content(62);

Błąd – Nie można utworzyć katalogu uploads/ w Wordpress

Po zmianie katalogu instalacyjnego Wordpressa lub przenosinach na inny serwer często pojawiają się problemy konfiguracyjne. Jednym z nich jest błąd uploadu mediów.
bladupload

Przykładowa treść błędu: Nie można utworzyć katalogu &#8222;uploads/2014/03&#8221;. Czy WordPress ma uprawnienie do zapisu do katalogu nadrzędnego?

Aby go wyeliminować należy poprawnie skonfigurować parametr “upload_path” z kolumny “option_name” w tabeli “wp_options”. Należy się upewnić, iż w kolumnie “option_value” podana jest aktualna ścieżka bezwzględna do katalogu uploadu.

Problem z Google Maps w ukrytym DIVie

Przy próbie wyświetlenia mapy Google znajdującej się w ukrytym divie (stosując np. zakładki na stronie) często pojawia się problem z prawidłowym ładowaniem mapy.
Mapa wygląda np. tak:
google

Wyeliminować go możemy resizując mapę już po załadowaniu/wyświetleniu ukrytego diva. Zrobimy to wywołując polecenie
google.maps.event.trigger(mapa, 'resize');

Dla przykładu – jeżeli ukrytego diva wyświetlamy funkcją wywoływaną przez onClick, po jej wywołaniu doklejamy powyższy kod.

Jeżeli po resizie mapa wyświetla się w całym zadanym obszarze, ale nie jest wyśrodkowana możemy użyć funkcji
mapa.setCenter(getCen);
gdzie getCen jest aktualnym środkiem mapy
getCen = mapa.getCenter();
Powyższą funkcję można wywołać wewnątrz funkcji initialize(), pamiętając jednak żeby przed ta drugą zadeklarować globalność zmiennej getCen (jeżeli zamierzamy ją użyć w onClick przełączanego taba).

Cały kod dla powyższego przykładu może mieć postać


<script type="\"text/javascript\"">// <![CDATA[
var getCen;
var mapa;
function initialize() {
var myLatlng = new google.maps.LatLng($szerokosc, $dlugosc);
var mapOptions = {
center: myLatlng,
zoom: $zoom
};
mapa = new google.maps.Map(document.getElementById(\"mapa\"),
mapOptions);
getCen = mapa.getCenter();
}
google.maps.event.addDomListener(window, 'load', initialize);
// ]]></script>

Zmianę taba z resizem i centrowaniem mapy wywołujemy wtedy np. tak:
<a onclick="tabShow('lokalizacja');google.maps.event.trigger(mapa, 'resize');mapa.setCenter(getCen);" href="#">lokalizacja</a>

Lightbox nie działa na nowszych IE

Jeżeli masz problem z działaniem lightboxa na nowszych wersjach IE (od 9 w górę) wystarczy zaktualizować bibliotekę Prototype.
Najnowszą można pobrać stąd.

Linki PHPBB otwierane w nowym oknie

Otwieranie linków zewnętrznych w tym samym oknie wiąże się najczęściej z przejściem użytkownika na inną stronę (użytkownik pozostaje tylko w przypadku kliknięcia prawym przyciskiem na link i wybrania opcji “otwórz w nowym oknie/karcie”).

Jeżeli chcemy, aby w naszym forum postawionym na PHPBB linki w postach i sygnaturach otwierały się w nowym oknie, musimy zmodyfikować funkcje odpowiedzialne za ich tworzenie. Edytujemy plik includes/functions_content.php. Znajdujemy w nim funkcję make_clickable_callback() i w jej ciele, do znacznika <a> dodajemy parametr target=”_blank”. Zmieniona linijka kodu będzie wyglądała następująco:

$html    = "$whitespace<!-- $tag --><a$class href=\"$url\" target=\"_blank\">$text</a><!-- $tag -->$append";

Następnie edytujemy plik bbcode.html. Znajdziemy do w podkatalogu template, w katalogu z naszym bieżącym stylem (np. styles/prosilver/template). Znajdujemy w nim linijkę zaczynającą się od <!– BEGIN url –>. W linijce tej, w znaczniku <a> dodajemy parametr target=”_blank”. Gotowy kod będzie wyglądał następująco:

<!-- BEGIN url --><a href="{URL}" target="_blank">{DESCRIPTION}</a><!-- END url -->

Parse error: eval()’d code

Czasami, szczególnie po ręcznym updatowaniu forum PHPBB pojawia się następujący błąd:

Parse error: eval()'d code

Oznacza on błąd w składni PHPBB. Błędem takim może być np. niedomknięcie instrukcji warunkowej itp. Co ważne błędu szukamy w plikach templatów.

Przykładowe błędy:

1. Niedomknięcie instrukcji warunkowej (brak <!– ENDIF –> na końcu kodu)
<!-- IF U_FORUM_RULES -->
kod html

2. Używanie w komentarzach słów zastrzeżonych dla składni PHPBB, np. BEGIN, END
<!-- BEGIN MOJ KOD -->
kod html
<!-- END MOJ KOD -->

3. Niedomknięcie instrukcji warunkowej
<!-- IF U_FORUM_RULES

Wordpress wycina iframe

Problem z usuwaniem iframe przez Wordpressa jest powszechnie znany. Dla przykładu: wstawiamy w tekście posta film z YouTube osadzony właśnie w iframe. Po przejściu z zakładki widoku wizualnego do html cały kod iframe jest wycinany. Po zapisaniu posta lub powrocie do edytora wizualnego i zapisaniu niestety tracimy wstawiony film.

Rozwiązanie tego problemu jest bardzo proste. Wystarczy w pliku functions.php, w głównym katalogu naszego templata dodać poniższą funkcję.

function mytheme_tinymce_config($init) {
$valid_iframe = 'iframe[id|class|title|style|align|frameborder|height|longdesc|marginheight| marginwidth|name|scrolling|src|width]';
if (isset($init['extended_valid_elements'])) {
$init['extended_valid_elements'] .= ',' . $valid_iframe;
} else {
$init['extended_valid_elements'] = $valid_iframe;
}
return $init;
}
add_filter('tiny_mce_before_init', 'mytheme_tinymce_config');

Paginacja Fotolia – getSearchResults.php oraz fotolia_api_client.php

Integrując portal z bankiem zdjęć – Fotolia.com – można skorzystać z przygotowanych przez Fotolię zbioru funkcji. Niestety starsze wersje, dostępne w sieci zawierają szereg błędów.

Jednym z nich jest nieprawidłowa paginacja (paginacja/stronnicowanie nie jest generowane). Aby naprawić błąd, należy zastąpić starszą wersję pliku fotolia_api_client.php nową, np. dostępną pod tym linkiem

Załączenie wielu plików w PHPMailer 5.0.0 – AddAttachment

W PHPMailerze w wersji 5.0.0 występuje błąd który uniemożliwia dodanie wielu załączników (metodą AddAttachment) do jednego maila.

Rozwiązanie problemu jest bardzo proste.

W pliku class.phpmailer.php odnajdujemy definicję funkcji AddAttachment:

public function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream')

W ciele funkcji odnajdujemy tablicę

$this->attachment[]

Ostatni element tablicy

7 => 0

zmieniamy na

7 => count($this->attachment)

Następna Strona »