Як включити код лише на певні сторінки?


14

Я дізнаюся про плагіни та шорт-коди. Я помітив, що коли я активую свій плагін, його код завантажується на всі мої сторінки - навіть на сторінки, у яких немає мого короткого коду. (Я не маю на увазі вміст та сторінки адміністратора). На деяких сторінках із вмістом я використовую певний короткий код, а на інших сторінках із вмістом - ні, але в будь-якому випадку код плагіна завантажується. Як зробити так, щоб плагін входив лише на сторінки, де використовується короткий код?

Детальніше:

Скажімо, у мене є плагін, який робить лайтбокс. Я активую плагін. На своїй сторінці "Класні зображення" я використовую короткий код для створення лайтбоксу. Коли я перевіряю Перегляд джерела на своїй сторінці "Про", яка не використовує короткий код лайтбоксу, я бачу, що код плагіна лайтбокса завантажений. Мої сторінки завантажуватимуться швидше, якщо я напишу свій плагін, щоб його код завантажувався лише на ті сторінки, де це потрібно. Чи можливо це? Інакше у мене буде код безлічі плагінів, завантажених на сторінки без потреби. Будь-які ідеї?


1
Чи намагаєтесь ви щось заперечити або намагаєтесь виконати скрипт PHP на сторінках, які мають короткий код?
mor7ifer

+1 @ m0r7if3r - Я також хотів би зрозуміти, що .. Підходи були б дуже різними
krembo99

@ mrOr7if3r, Дякую за повідомлення Наприклад, скажімо, у мене є плагін Google Maps. Чи потрібно цей плагін завантажувати на кожну сторінку, тобто сторінки, які не використовують цей плагін? Скажімо, у мене є сторінка "Про", на якій немає короткого коду Карт Google. Якщо я дивлюсь на View Source, я бачу, що на цю сторінку завантажено код плагіна (подія, хоча я не використовую). Чи повинен код плагінів завантажуватися на кожну сторінку? Спасибі.
Laxmidi

Хороший питання, який призводить до (нової) найкращої практики, оскільки WP дозволяє нам створювати сценарії в будь-який момент часу.
Рафаель

Відповіді:


9

WP v3.3 дав нам можливість запустити wp_enqueue_script у середині сторінки. Квиток 9346

Це значно полегшило включення вашого JS з кращою деталізацією (принаймні при використанні коротких кодів). Тут jquery буде включений лише після запуску нашого короткого коду.

function get_slideshow() {
  // Do some stuff...

  // Load up scripts right from within our shortcode function (requires WP 3.3+)
  wp_enqueue_script( 'jquery', array(), null, true  ); 

  return;
}
add_shortcode( 'cool_slideshow', 'get_slideshow' );

1
Ось як це слід робити, imo.
Рафаель

1
Відмінно, я не зрозумів, що зараз можна запустити wp_enqueue_script у середині сторінки. Набагато чистіший спосіб завантажувати сценарії / css лише при необхідності!
Рік Курран

2

Перевірте змінні інтерфейсу адміністратора

Один пункт меню - особливий випадок: коментарі, оскільки вони реєструються за допомогою add_WHATEVER_(submenu)page()API.

// All need to be stated as beeing global
global $pagenow, $typenow, $hook_suffix, $parent_file, $submenu_file, $post_type_object;
if ( 'THE-OUTPUT.php' === $WHATEVER_YOU_CHOOSE_TO_CHECK )
    // do stuff

Вони є непостійними і жорстко закодованими в WP core. Зауважте, що не всі встановлені на всіх сторінках.

Підключіть до певних сторінок адміністратора користувальницький інтерфейс

Потім є також спеціальні гачки для сторінок, на які ви можете подивитися admin-footer.phpі admin-header.php:

// Examples:
// Header
"admin_head-$hook_suffix"
"admin_print_styles-$hook_suffix"
"admin_print_scripts-$hook_suffix"
// Footer
"admin_footer-$hook_suffix"

Деякі приклади в реальному світі: Поштовий екран

// Examples how the result looks like
admin_print_styles-post.php
admin_print_styles-post-new.php

Тоді також є $hook_suffixте, що ви можете перевірити, чи не запускається сценарій, прямо під час підключення вашої дії:

do_action( 'admin_enqueue_scripts', $hook_suffix );

Оновлення

Щоб полегшити доступ до цих даних / інформації, ми створили вільний доступний для розробників плагін під назвою "(WCM) Current Admin Info" , який доступний на GitHub . Плагін найближчим часом також можна знайти в офіційному сховищі wp.org .

Екранні знімки

Щоб отримати попередній перегляд того, що ви отримуєте з цим плагіном:

Екран

Гачки

Глобали


0

Можна зробити щось за рядком (у header.php):

<?php
        if ( have_posts() && ( is_page() || is_single() ) ) {
            $content = get_the_content(the_post());
            if ( stripos( $content , '[your-shortcode') ) { function_for_scripts(); } 
        }   
?>

Перевіряє, чи є поточне завантаження сторінкою чи публікацією, а потім захоплює вміст та шукає ваш короткий код. Знайшовши його, він виконує вашу функцію.


Спасибі за Ваше повідомлення. Я спробував скористатися вашим рішенням, але, на жаль, я не зміг змусити його працювати.
Лаксміді

Додано до заголовка?
Ноель Ток

1
Ви вже бачили get_shortcode_regex()?
кайзер

0

Найпростіший спосіб - просто перевірити наявність короткого коду.

function your_scripts()
{ 
    global $post;
    wp_register_script('your-script',$the_path_to_your_script,'0.1',true);
    if ( strstr( $post->post_content, '[your-shortcode' ) ) 
    {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'your_scripts');

1
Там get_shortcode_regex()для цього.
кайзер

0

@kaiser get_shortcode_regex()кілька разів відзначав цю тему, я просто думав, що я навожу приклад того, як ним користуватися. Код у значній мірі взято зі get_shortcode_regex()сторінки довідкового коду WordPress.

function enqueue_script_if_shortcode_is_detected() {
    global $post;

    wp_register_script( 'your-script', $the_path_to_your_script, '1.0', true );

    $pattern = get_shortcode_regex();

    if (   preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( 'your-shortcode', $matches[2] )
    ) {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'enqueue_script_if_shortcode_is_detected' );

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.