it-roy-ru.com

Включая JavaScript для шорткода

Я создаю плагин, который позволяет пользователю использовать шорткод. Этот шорткод зависит от набора javascript, который должен присутствовать после загрузки шорткода.

У меня проблемы, пытаясь решить, когда и где загрузить JavaScript. Куски кода, которые выдает шорткод, являются элементами, которые должны присутствовать, но не доступны для использования jQuery.

Есть ли особый способ загрузки и присоединения сценариев, на которые опирается шорткод?

function build_total_search_method( $atts ) {

    $shorcode_php_function = include( dirname(__FILE__) . "/includes/total_search.php" );

    return $shorcode_php_function;

}
add_shortcode( 'total_search', 'build_total_search_method' );

Кажется, это работает, но также печатает 1 на страницу. Этот метод в порядке?

2
dcolumbus

Используйте wp_enqueue_script в вашем обработчике шорткода, в WordPress> = 3.3 он будет добавлен на страницу в действии wp_footer. Передайте любые необходимые данные из PHP в JavaScript через wp_localize_script .

4
Milo

wp_enqueue_script() включает wp_localize_script() - правильное решение. Разберите аргументы шорткода или поставьте в очередь сценарий.

Если у вас много данных, и вы будете использовать их в объекте Json. Некоторые советы, которые должны помочь, если речь идет о проблемах или ссылки на решения через JSON напрямую. Функция wp_localize_script() декодирует HTML-объекты, что является важным, но не всегда идеальным решением. Функция использует функцию json_encode(), которая может разрешать проблемы в многомерных массивах, связанные с декодированием объектов. Альтернативное решение - отправить данные в виде объекта json, как в примере ниже.

add_action( 'admin_enqueue_scripts', 'fb_print_scripts' );
function fb_print_scripts() {
    global $current_screen;

    if ( isset( $current_screen -> id ) && ! in_array( $current_screen -> id, array( 'post', 'page' ) ) )
        return;

    if ( is_plugin_active_for_network( plugin_basename( __FILE__ ) ) )
        $options = get_site_option( 'my_options_id' );
    else
        $options = get_option( 'my_options_id' );

    if ( ! $options )
        return;
    ?>
    <script type="text/javascript">
        var my_json_object = <?php echo json_encode( $options ); ?>;
    </script>
    <?php
}
0
bueltge