Pull to refresh
35
0
Артур @kovalevsky

Пользователь

Send message
Я этими плагинами на хлеб зарабатываю :)
Так что если думаете релизить его на вп.орг, то Вам ещё много работы предстоит
А вообще, в идеале конечно к этому всему добавить класс, JS в отдельный файл, а там уже что-то вроде:
$('.galleria').each(
   Galleria.run(this.id, // ...
);

Было бы куда лучше. У Вас бы весь этот код не дублировался бы на каждый вызов шорткода.
Ну смотрите, Вы можете к ID блока с галереей добавлять timestamp, пропускать название через uniqid(), таким образом у Вас не 100% не будет 2х одинаковых ID на странице, соответственно Вы сможете загрузить две или более галереи на страницу.

Всё это дело всё равно в PHP забито, так что Вы просто можете сделать что-то подобное:
// ...
$id = uniqid('galleria');
// ...
// <div id="galleria"></div> меняем на:
<div id="$id"></div>
// в JS части 
// Galleria.run("#galleria", { меняем на
Galleria.run("$id", {

Вот по примеру такого псевдокода должно решить проблему.
Честно — вообще не вижу случаев, тем более здесь, чтоб править jQuery.

Я бы Ваш код поправил. Например, у Вас там галерея по ID. А что если Вы вставите несколько галерей на страницу? Скорее всего не будет работать, так ещё и кашу из JS и HTML продублирует в кол-ве вставленных шорткодов.

У Вас там две переменных, speed и clickNext, которыми Вы засоряете window, их любой другой плагин может перезаписать.
Если бы Вы обернули код, как я предложил выше — (function ($) {}(jQuery));, то, как минимум, не нужно было бы мутить с jQuery и не пихали бы всё в глобальный скоуп.

Далее — раз уже у вас захардкорено всё в куче, то и ID у галереи можно хоть чем-нибудь разбавить, чтоб можно было вставить несколько шорткодов.
Простите, а зачем переподключать jQuery или что-то править?
(function ($) {
    // $ = jQuery
}(jQuery));

или
jQuery(document).ready(function ($) {
    // $ = jQuery
});

Вас такое чем конкретно не устраивает, чтоб второй раз jQuery загружать?

Собственно в документации ф-ции, которую Вы приводите в коде это и так написано — codex.wordpress.org/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA_%D0%BF%D0%BE_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%D0%BC/wp_enqueue_script
Эти уязвимости уже настолько обсосаны и разжеваны везде, не только на Хабре, что уже неинтересно читать даже. Без обид.
Да, это выбор каждого. Я предпочитаю использовать уже написанное и покрытое тестами, а не писать велосипеды. В некоторых случаях своё, конечно, оправданно, не спорю.
Вот видите, об этом я и говорю — информации в статье крайне мало. Мне, как минимум, было бы интересно почитать и перенять опыт :)

За бандл отдельное спасибо ;)
Я бы в контексте Symfony + API добавил бы в статью ещё и рассказ об FOSRestBundle, о какой-нибудь JWT аутентификации, обновлении и удалении токена и прочем. Ибо когда мне пришлось выполнять данную задачу, то столкнулся с кучей проблем уже на первых парах.

Было бы интересно почитать :)
На здоровье
<?php

/**
 * Plugin Name: Rename Attachments
 */

/**
 * Class RenameAttachments
 * @package RenameAttachments
 */
class RenameAttachments
{
    /**
     * Hooks the "add_attachment" action.
     */
    public static function register()
    {
        add_action('add_attachment', array(__CLASS__, 'rename'));
        add_filter(
            'filter_attachment_filename',
            array(__CLASS__, 'filterAttachmentFileName')
        );
    }

    /**
     * Filters attachment file name.
     * @param string $file Attachment file name.
     * @returns string
     */
    public static function filterAttachmentFileName($file)
    {
        return crc32(md5(mt_rand() . microtime()) . sanitize_file_name($file)) . '_' . sanitize_file_name($file);
    }

    /**
     * Renames the attachment.
     * @param int $attachmentId Attachment ID.
     */
    public static function rename($attachmentId)
    {
        if (!$path = get_attached_file($attachmentId)) {
            return;
        }

        $trash = array();
        $uploads = wp_upload_dir();
        $original = basename($path);

        $filtered = apply_filters(
            'filter_attachment_filename',
            $original
        );

        $images = glob(dirname($path) . '/' . pathinfo($original, PATHINFO_FILENAME) . '*');
        if ($images === false || (is_array($images) && count($images) === 0)) {
            return;
        }

        foreach ($images as $image) {
            $name = str_replace($original, $filtered, $image);
            if (copy($image, $name)) {
                $trash[] = $image;
            }
        }

        $path = dirname($path) . '/' . $filtered;
        $attachedFile = str_replace($uploads['basedir'] . '/', '', $path);

        if (update_post_meta($attachmentId, '_wp_attached_file', $attachedFile) === true) {
            foreach ($trash as $file) {
                @unlink($file);
            }
        }
    }

}

RenameAttachments::register();

Дело, конечно, Ваше. По мне, так проще один раз плагин на 10-15 строчек написать, чем править код движка :)
/**
 * Plugin Name: %Имя_Вашего_Великолепного_Плагина%
 */

add_action('add_attachment', function ($attachmentId) {
    $attachment = get_post($attachmentId);
    $path = get_attached_file($attachmentId);

    // в $path у Вас полный путь к файлу, а в $attachment - объект WP_Post вашего аттачмента
    // ... здесь Ваша логика для того, чтоб переименовать файл.
});


Вот по сути весь Ваш плагин. Вам просто нужно в объекте $attachment заменить урл в свойстве guid на новый, который будет вести к переименованному файлу. Как-то так:
$uploads = wp_upload_dir();

wp_update_post(array(
    'ID'   => $attachment->ID,
    'guid' => trailingslashit($uploads['url']) . basename($path_to_renamed_file)
))
Да. «add_attachment» срабатывает после загрузки аттачмента и в кач-ве параметра передаст ID. По ID можно получить все данные по аттачменту и делать с ним что угодно
1. Создайте файл в /wp-content/plugins/
2. В начале файла напишите блок с комментарием:
/**
 * Plugin Name: %Имя_Вашего_Великолепного_Плагина%
 */

3. add_action на add_attachment
4. По ID аттачмента меняйте ему имя
5. Включайте свой плагин

Это было бы быстрее и практичнее, чем каждый раз править файлы движка.
А с каких пор всё остальное нельзя проверить браузером? :)
Arduino подключается к серверу и отправляет GET запрос, где содержатся значения датчиков температуры.


GET-запрос должен получать данные, а не записывать. Пишите через POST.
Планшет Lenovo Yoga, из коробки стоит Norton, который просто нельзя удалить штатными средствами :/
Было же популярное приложение (если не ошибаюсь — Яндекс.Диск), в котором авторы случайно переборщили с rm -rf и накатили это обновление пользователям. Так что описанный Вами кейс вполне реален, учитывая, что для доверенных приложений просьба рута выглядит не так пугающе (по-крайней мере для меня) :)

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity