Potrzebowałem sposobu na odfiltrowanie zawartości strony / postów przed jej załadowaniem, aby móc dodać skrypty do nagłówka, jeśli występuje określony krótki kod. Po wielu poszukiwaniach natknąłem się na to na http://wpengineer.com
function has_my_shortcode($posts) {
if ( empty($posts) )
return $posts;
$found = false;
foreach ($posts as $post) {
if ( stripos($post->post_content, '[my_shortcode') )
$found = true;
break;
}
if ($found){
$urljs = get_bloginfo( 'template_directory' ).IMP_JS;
wp_register_script('my_script', $urljs.'myscript.js' );
wp_print_scripts('my_script');
}
return $posts;
}
add_action('the_posts', 'has_my_shortcode');
co jest absolutnie genialne i zrobiło dokładnie to, czego potrzebowałem.
Teraz muszę go trochę rozszerzyć i zrobić to samo dla pasków bocznych. Może to być określony typ widżetu, krótki kod, fragment kodu lub cokolwiek innego, co działałoby w celu zidentyfikowania, kiedy skrypt musi zostać załadowany.
Problem polega na tym, że nie mogę dowiedzieć się, jak uzyskać dostęp do zawartości pasków bocznych przed załadowaniem paska bocznego (dany motyw będzie miał kilka pasków bocznych)
widgets
javascript
sidebar
conditional-content
Ashley G.
źródło
źródło
Odpowiedzi:
Możesz użyć funkcji is_active_widget . Na przykład:
Aby załadować skrypt tylko na stronę, na której widżet jest ładowany, musisz dodać kod is_active_widget () do klasy widżetu. Np. Zobacz domyślny widżet ostatnich komentarzy (wp-zawiera / domyślny-widgets.php, wiersz 602):
źródło
Chciałem tylko udostępnić rozwiązanie, nad którym pracowałem, dzięki czemu mogłem być nieco bardziej wszechstronny przy wdrażaniu. Zamiast sprawdzania funkcji pod kątem różnych skrótów, zmodyfikowałem go, aby znaleźć pojedynczy skrót, który odwołuje się do funkcji skryptu / stylu, która wymaga kolejkowania. Będzie to działać dla obu metod w innych klasach (takich jak wtyczki, które same tego nie mogą zrobić) i funkcji w zakresie. Po prostu upuść poniższy kod w functions.php i dodaj następującą składnię do dowolnej strony / postu, w której chcesz mieć określony CSS i JS.
Składnia strony / postu: [loadCSSandJS function = "(class-> method / function name)"]
kod funkcji.php:
Umożliwi to również dodanie dowolnej liczby stron na stronie. Pamiętaj, że do załadowania potrzebujesz metody / funkcji.
źródło
Dziękujemy za udostępnienie tej wskazówki! Sprawiało mi to ból głowy, ponieważ na początku nie działało. Wydaje mi się, że w powyższym kodzie jest kilka błędów (być może literówek)
has_my_shortcode
i przepisałem funkcję jak poniżej:Myślę, że były dwa główne problemy:
break
nie było to w zakresie instrukcji if, a to spowodowało, że pętla zawsze przerywała się przy pierwszej iteracji. Drugi problem był bardziej subtelny i trudny do wykrycia. Powyższy kod nie działa, jeśli krótki kod jest pierwszą rzeczą napisaną w poście. Musiałem użyć===
operatora, aby rozwiązać ten problem.W każdym razie bardzo dziękuję za udostępnienie tej techniki, bardzo pomogła.
źródło
w Wordpress 4.7 istnieje inny sposób na osiągnięcie tego w twoim
functions.php
pliku,najpierw zarejestruj swój skrypt , który tak naprawdę nie zostanie wydrukowany na twojej stronie, chyba że umieścisz go w kolejce, jeśli zostanie wywołany Twój shortcode,
do_shortcode_tag
został wprowadzony w WP 4.7 i można je znaleźć w nowej dokumentacji programiści stron.źródło