[Инфо] Wordpress: плюшки файла functions.PHP ))

Тема в разделе "Wordpress", создана пользователем Красавчег, 10 окт 2012.

Информация :
Все пользователи Nulled-а обязаны ознакомиться с основными правилами форума!
Правила: Правила форума
Правила раздела: ОБЩИЕ СВЕДЕНИЯ | Правила раздела | Правила оформления [​IMG]
Полезное: Раскодирование шаблонов | Шорткоды | Поиск плагинов | [​IMG] Складчины
Плюшки: functions.PHP - часть 1 | часть 2
Разделы WP: Шаблоны | CodeCanyon
Статус темы:
Закрыта.
Модераторы: ponoroshca
  1. ezh88

    ezh88 Создатель

    Регистр.:
    26 янв 2016
    Сообщения:
    35
    Симпатии:
    10
    ------------------------------------------------------------------------
    Выполнение PHP-кода в виджетах WordPress без плагина
    ------------------------------------------------------------------------
    Код:
    // Выполнение PHP-кода в виджетах WordPress без плагина
    function mayak_widget_php($widget_content) {
    if (strpos($widget_content, '<' . '?') !== false) {
    ob_start();
    eval('?' . '>' . $widget_content);
    $widget_content = ob_get_contents();
    ob_end_clean();
    }
    return $widget_content;
    }
    add_filter('widget_text', 'mayak_widget_php', 99);
     
  2. unnell

    unnell Создатель

    Регистр.:
    28 июл 2013
    Сообщения:
    14
    Симпатии:
    12
    Доп поля при оформлении заказа
    Код:
    
    
    
    
    
    
    
    // Add a new checkout field
    function kia_filter_checkout_fields($fields){
        $fields['extra_fields'] = array(
                'f1' => array('type' => 'text', 'required'      => false, 'label' => 'Название компании'),
                'f2' => array('type' => 'text', 'required'      => false, 'label' => 'Юридический адрес'),
                'f3' => array('type' => 'number', 'required'      => false, 'label' => 'ИНН'),
                'f4' => array('type' => 'number', 'required'      => false, 'label' => 'КПП'),
                'f5' => array('type' => 'text', 'required'      => false, 'label' => 'Контактное лицо'),
                'f6' => array('type' => 'email', 'required'      => false, 'label' => 'E-Mail'),
                'f7' => array('type' => 'text', 'required'      => false, 'label' => 'Телефон'),
                'f8' => array('type' => 'text', 'required'      => false, 'label' => 'Факс'),
                'f9' => array('type' => 'number', 'required'      => false, 'label' => 'Индекс'),
                'f10' => array('type' => 'text', 'required'      => false, 'label' => 'Местоположение'),
                'f11' => array('type' => 'textarea', 'required'      => false, 'label' => 'Адрес доставки'),
        );
        return $fields;
    }
    add_filter( 'woocommerce_checkout_fields', 'kia_filter_checkout_fields' );
    
    // display the extra field on the checkout form
    function kia_extra_checkout_fields(){
    
        $checkout = WC()->checkout(); ?>
    
        <div class="extra-fields">
            <div class="row clicker" ><h3>Юридическим лицам</h3> <i class="fa fa-angle-down"></i><i class="fa fa-angle-up" aria-hidden="true"></i></div>
            <div class="hide09">
                <?php foreach ( $checkout->checkout_fields['extra_fields'] as $key => $field ) : ?>
                    <?php woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); ?>
                <?php endforeach; ?>
            </div>
        </div>
    
    <?php }
    
    
    
    
    
    add_action( 'woocommerce_checkout_after_customer_details' ,'kia_extra_checkout_fields' );
    
    // save the extra field when checkout is processed
    function kia_save_extra_checkout_fields( $order_id, $posted ){
       
        $checkout = WC()->checkout();
       
         foreach ( $checkout->checkout_fields['extra_fields'] as $key => $field ) :
            if( isset( $posted[$key] ) ) { update_post_meta( $order_id, '_'.$key, sanitize_text_field( $posted[$key] ) ); }
        endforeach;
    
    }
    add_action( 'woocommerce_checkout_update_order_meta', 'kia_save_extra_checkout_fields', 10, 2 );
    
    // display the extra data in the order admin panel
    function kia_display_order_data_in_admin( $order ){
    
    $ar = array(1=>'Название компании',  'Юридический адрес', 'ИНН', 'КПП', 'Контактное лицо', 'E-Mail', 'Телефон', 'Факс', 'Индекс', 'Местоположение', 'Адрес доставки');
    
    ?>
        <div class="order_data_column">
            <h4>Юридическим лицам</h4>
            <?php
            for($i = 1;$i <= 11; $i++){
                echo '<p><strong>' .$ar[$i] . ':</strong>' . get_post_meta( $order->id, '_f'.$i, true ) . '</p>';
            } ?>
        </div>
    <?php }
    add_action( 'woocommerce_admin_order_data_after_order_details', 'kia_display_order_data_in_admin' );
    
     
    dana77 нравится это.
  3. ezh88

    ezh88 Создатель

    Регистр.:
    26 янв 2016
    Сообщения:
    35
    Симпатии:
    10
    ------------------------------------------------------------------------
    Как открывать все внешние ссылки в новом окне
    ------------------------------------------------------------------------
    // Открывать внешние ссылки в новом окне
    function autoblank($text) {
    $return = str_replace('href=', 'target="_blank" href=', $text);
    $return = str_replace('target="_blank" href="http://site.ru', 'href="http://site.ru', $return);
    $return = str_replace('target="_blank" href="/', 'href="/', $return);
    $return = str_replace('target="_blank" href="#', 'href="#', $return);
    $return = str_replace(' target = "_blank">', '>', $return);
    return $return;
    }
    add_filter('the_content', 'autoblank');
    add_filter('comment_text', 'autoblank');
     
  4. SmileNet

    SmileNet Постоялец

    Регистр.:
    6 окт 2012
    Сообщения:
    72
    Симпатии:
    22
    Создает миниатюру large по размерам указанным в настройках и заменяет ей оригинал. В итоге и размер оптимальный, лишних (не нужных дублей нет), и "оригинал" всегда на месте. Проверено.
    PHP:
    function replace_uploaded_image($image_data) {
          
    // if there is no large image : return
      
    if (!isset($image_data['sizes']['large'])) return $image_data;

      
    // paths to the uploaded image and the large image
      
    $upload_dir wp_upload_dir();
      
    $uploaded_image_location $upload_dir['basedir'] . '/' .$image_data['file'];
      
    // $large_image_location = $upload_dir['path'] . '/'.$image_data['sizes']['large']['file']; // ** This only works for new image uploads - fixed for older images below.
      
    $current_subdir substr($image_data['file'],0,strrpos($image_data['file'],"/"));
      
    $large_image_location $upload_dir['basedir'] . '/'.$current_subdir.'/'.$image_data['sizes']['large']['file'];

      
    // delete the uploaded image
      
    unlink($uploaded_image_location);

      
    // rename the large image
      
    rename($large_image_location,$uploaded_image_location);

      
    // update image metadata and return them
      
    $image_data['width'] = $image_data['sizes']['large']['width'];
      
    $image_data['height'] = $image_data['sizes']['large']['height'];
      unset(
    $image_data['sizes']['large']);

      return 
    $image_data;
    }

    add_filter('wp_generate_attachment_metadata','replace_uploaded_image');
    Взято отсюда
     
    R... и нарада нравится это.
  5. moredemons

    moredemons Создатель

    Регистр.:
    24 мар 2017
    Сообщения:
    13
    Симпатии:
    4
    Такой сниппет можно использовать
    Код:
    add_filter('woocommerce_get_availability_text', function($text, $product) {
    if (!$product->is_in_stock()) {
        $text = 'N кол-во дней под заказ';
    }
    return $text;
    }, 10, 2);
     
    cart13 нравится это.
  6. SmileNet

    SmileNet Постоялец

    Регистр.:
    6 окт 2012
    Сообщения:
    72
    Симпатии:
    22
    Однако здравствуйте :crazy:
    Двое суток почти пытался решить проблему. Есть в WP нехорошая дыра, не знаю о чем думают разработчики. При создании пользователя в таблице users у пользователя создается автоматом user_nicename (не путайте с nickname из таблицы usermeta, который редактируется в профиле пользователя). Доступа к редактированию user_nicename кроме как из БД нет. user_nicename используется как уникальный идентификатор при просмотре страниц авторов (если навести курсор на автора в ссылке мы увидим именно его). Самое гадкое в этом то, что user_nicename при регистрации устанавливается равным user_login, т.е. начинает светить логины пользователей. Светит даже тех кто не является автором, это можно проверить введя в адресную строку сайт.ru/?author=1 (последняя цифра ID пользователя, в данном случае администратора) после перехода по ссылке адрес страницы будет иметь вид сайт.ru/author/admin/ (адрес будет отличаться в зависимости от настройки ЧПУ), admin в данном случае это и есть user_nicename пользователя с ID1. В итоге пол дела для взлома мы сделали сами, остается подобрать пароль.
    Долго думал и искал как решить проблему (знал бы php сделал бы быстрей :D). На запросы гугл отвечал какой то хренью, пришлось ковырять самому. В итоге нашел где в user.php устанавливается user_nicename и Правильно (а как известно правильно заданный вопрос уже содержит ответ) спросил гугл:D. В итоге был найден хук который при регистрации пользователя меняет user_nicename на user_id Менять надо именно на user_id т.к. при создании пользователя это единственная уникальная переменная. Теперь перейдя по ссылке сайт.ru/?author=1 адрес будет выглядеть сайт.ru/author/1/. В итоге логин не светится ни где (я по крайней мере пока не нашел) и сохранена уникальность ников для отображения страниц авторов. Если вам хочется что б ваша страница была не цифрой, а словом, поменяйте ник через БД, но не забывайте про уникальность. Я сделал себе ник admin.... не спроста:) У меня установлен плагин ithemes security a нем есть опция немедленной блокировки хоста с которого пытаются войти с логином admin, т.е. провоцируем и в бан :D

    Ну и сам хук

    PHP:
    // Заменяем user_nicename на user_id
    add_action('user_register','write_new_nicename',10);
    function 
    write_new_nicename($user_id){
    global 
    $wpdb;
    $wpdb->update(
    $wpdb->prefix 'users',
    array(
    'user_nicename' => $user_id),
    array(
    'ID' => $user_id)
    );
    }
    Проверено, работает.
     
    Последнее редактирование: 22 май 2017
    нарада, latteo и magicrobot нравится это.
  7. SmileNet

    SmileNet Постоялец

    Регистр.:
    6 окт 2012
    Сообщения:
    72
    Симпатии:
    22
    Раз пятый пытаюсь описАть, опишу лаконично.
    Хук может заполнять автоматом поля при добавлении изображения через редактор, кнопка "Добавить медиафайл"
    1 и 2 переменные: получает адрес сайта без слеша на конце и удаляет его из ссылки, вставляемая ссылка имеет вид : "\uplodad\......." (в зависимости какая директория для загрузки). Дает плюс при переезде на другой домен (все ссылки относительно корня)
    3 переменная: добавляет класс к изображению
    4 переменная: добавляет класс к сылке
    3 и 4 актуальны когда для всех изображений используется один класс, например 4 я использую для открытия всех изображений в лайтбокс. 3 я не использую, но можно использовать для добавления ко всем изображениям класса рамок.
    Не нужное можно за комментировать или удалить.

    PHP:
    // Добавление class=" " к изображениям, обрезка домена у ссылок (редактор медиа)
    add_filter'image_send_to_editor''filter_class_media_editor'10);
    function 
    filter_class_media_editor $html){
        
    $site_url get_site_url();                                                   // получаем адрес блога
        
    $html str_replace$site_url''$html );                               // удалим домен без слеша на конце
        
    $html str_replace('class="''class="Имя_Класса'$html );      // добавим класс изображения
        
    $html str_replace('<a','<a class="Имя_Класса"',$html);         // добавим класс ссылки
        
    return $html;
    }
    Так же замечено, что при добавлении изображения не добавляется поле title, забирается только alt. В исходном коде на месте переменной $title установлено 'пустое_значение '. У меня alt и title одинаковы, по этому ковырять глубоко не стал изменил в
    /wp-admin/includes/media.php:122
    PHP:
    $html get_image_tag$id''$alt$align$size );
    на
    PHP:
    $html get_image_tag$id$alt$alt$align$size );
    При очередном обновлении движка изменения могут пропасть, хотя при добавлении изображения это будет видно и можно поправить опять.
     
    leoNeo нравится это.
  8. fuxilazo

    fuxilazo Создатель

    Регистр.:
    3 ноя 2016
    Сообщения:
    26
    Симпатии:
    6
    PHP:
    //удаляет H2 из шаблона пагинации
    add_filter('navigation_markup_template''my_navigation_template'10);
    function 
    my_navigation_template$template$class ){
        return 
    '
        <nav class="page-navigation %1$s" role="navigation">
            <div class="nav-links">%3$s</div>
        </nav>  
        '
    ;
    }
     
    Последнее редактирование: 6 июн 2017
  9. t.voskanyan

    t.voskanyan Писатель

    Регистр.:
    21 июн 2017
    Сообщения:
    1
    Симпатии:
    0
    Тема Storefront от Woocommerce

    // Показать наименования товара над фото, на странице магазина

    PHP:
    remove_action'woocommerce_shop_loop_item_title''woocommerce_template_loop_product_title'10 );
    add_action'woocommerce_before_shop_loop_item''woocommerce_template_loop_product_title'10 );
    // Показать категории товаров под наименованием, на странице магазина

    PHP:
    add_action'woocommerce_before_shop_loop_item_title''avia_add_product_cat'1);
    add_action'woocommerce_single_product_summary''avia_add_product_cat'5);
    function 
    avia_add_product_cat()
    {
        global 
    $product;
        
    $product_cats wp_get_post_terms($product->id'product_cat');
        
    $count count($product_cats);
        foreach(
    $product_cats as $key => $cat)
        {
            echo 
    '<span class="category-under-title">'.$cat->name.'</span>';
            if(
    $key < ($count-1))
            {
                echo 
    ', ';
            }
            else
            {
                echo 
    '<br/>';
            }
        }
    }
     
  10. DzSoft

    DzSoft 3T

    Регистр.:
    13 сен 2007
    Сообщения:
    341
    Симпатии:
    208
    Думаю старые функции уже можно закрывать. Ибо, что-то не работает уже с изменением и усовершенствованием WordPress (хорошо сказал :D).
    новая тема тут, но эту тему не стану удалять возможно кому-то и пригодится + тут есть относительно новые функции.
     
    yavasilek нравится это.
Статус темы:
Закрыта.