Задать вопрос
  • Можно ли в Wordpress сделать категорию, которую видят только определенные люди (админ, например)? А другие даже не знают о ее существовании?

    alex-1917
    @alex-1917
    Если ответ помог, отметь решением
    // Пример использования для текущего пользователя
    if( is_user_role( 'customer' ) )
    	echo "есть доступ";
    else
    	echo "нет доступа";
    
    // Пример использования для определенного пользователя
    $user_id = 23;
    
    if ( is_user_role( 'customer', $user_id ) )
    	echo "У вас есть доступ";
    else
    	echo "У вас нет доступа";


    Найдено тут: https://wp-kama.ru/function/current_user_can
    Найдено так: вордпресс если админ

    Лень - двигатель Тостера.
    Ответ написан
    Комментировать
  • Как в Excel оставить только те ячейки, где значения либо содержат цифры либо начинаются с цифры?

    Volounteer
    @Volounteer
    Пишете в B1 формулу:
    =И(ДЛСТР(A1)=17;ПСТР(A1;7;1)=".";ПСТР(A1;11;1)=".")
    Копируете вниз.
    Получите ИСТИНА там, где нужная строка. ЛОЖЬ - где ненужная. Удаляете строки, в которых ЛОЖЬ
    Ответ написан
    3 комментария
  • Как удалять товар вместе с изображениями?

    Kozack
    @Kozack Куратор тега WordPress
    Thinking about a11y
    Ну, примерно так: вешаем на событие удаления поста — поиск всех прикреплённых изображений и поочерёдно их удаляем
    <?php
    add_action('before_delete_post', 'wps_remove_attachment_with_post', 10);
    function wps_remove_attachment_with_post($post_id)
    {
        // We check if the global post type isn't ours and just return
        global $post_type;
        if ($post_type != 'my_product_post_type')
            return;
        
        $media = get_attached_media('image', $post_id);
        foreach ($media as $image) {
            wp_delete_attachment($image->ID, true);
        }
        
    }
    ?>
    Ответ написан
    1 комментарий
  • Могу ли я использовать код премиум wordpress плагина, выложенного в открытом доступе, в коммерческом проекте?

    deniscopro
    @deniscopro Куратор тега WordPress
    WordPress-разработчик, denisco.pro
    Но секундочку...погодите-ка...могу ли я просто взять этот код и использовать в коммерческом проекте?

    Да, но:
    1. Ваш проект также должен быть под лицензией GPL (+ другие условия лицензии GPL, в интернете есть текст лицензии, можете ознакомиться).
    2. Лицензия WordPress обязывает, чтобы PHP-код плагинов для WP (то бишь её производных) был под GPL, но это не обязательно относится к изображениям и стилям оформления. Они могут быть защищены другой лицензией.
    3. Название плагина может быть зарегистрировано как торговая марка, что опять же может вызвать проблемы с законом.
    да ладно, выходит, что оплачивать плагин нет необходимости и вопрос об оплате, по сути, сводится к этике

    Вопрос об оплате сводится к получении кода плагина от разработчика (лицензия GPL не запрещает продавать код, даже чужой) + лицензионный ключ даёт право на поддержку и последующие обновления.
    Т.е. в большинстве случаев Вам продают не код, который в современном мире можно найти минут за 5 гугления, а именно поддержку и возможность оперативно получать новые версии плагина от разработчика.
    Ответ написан
    2 комментария
  • Как добавить произвольные поля в атрибуты товара Woocommece?

    cjstress
    @cjstress Автор вопроса
    C#
    Все таки пришлось использовать ACF. Использовал докуhttps://www.advancedcustomfields.com/resources/cus...

    // Adds a custom rule type.
    add_filter( 'acf/location/rule_types', function( $choices ){
        $choices[ __("Other",'acf') ]['wc_prod_attr'] = 'WC Product Attribute';
        return $choices;
    } );
    
    //Add custom operator
    add_filter('acf/location/rule_operators', 'acf_location_rules_operators');
    function acf_location_rules_operators( $choices ) {
        $choices['start_with'] = 'Starts with';
        return $choices;
    }
    
    // Adds custom rule values.
    add_filter( 'acf/location/rule_values/wc_prod_attr', function( $choices ){
        $choices['pa_'] = "pa_";
        return $choices;
    } );
    
    // Matching the custom rule.
    add_filter( 'acf/location/rule_match/wc_prod_attr', function( $match, $rule, $options ){
        if ( isset( $options['taxonomy'] ) ) {
            if ('start_with' === $rule['operator']){
                $match = substr($options['taxonomy'], 0, strlen($rule['value'])) === $rule['value'];
            }
        }
        return $match;
    }, 10, 3 );
    
    if( function_exists('acf_add_local_field_group') ) {
        acf_add_local_field_group(array(
            'key' => 'group_5bdf16f6a992f',
            'title' => 'Расширенные настройки атрибута',
            'fields' => array(
                array(
                    'key' => 'field_5bdf16fc51f9b',
                    'label' => 'Заголовок в архиве',
                    'name' => 'Расширенный заголовок',
                    'type' => 'text',
                    'instructions' => '',
                    'required' => 0,
                    'conditional_logic' => 0,
                    'wrapper' => array(
                        'width' => '',
                        'class' => '',
                        'id' => '',
                    ),
                    'default_value' => '',
                    'placeholder' => '',
                    'prepend' => '',
                    'append' => '',
                    'maxlength' => '',
                ),
            ),
            'location' => array(
                array(
                    array(
                        'param' => 'wc_prod_attr',
                        'operator' => 'start_with',
                        'value' => 'pa_',
                    ),
                ),
            ),
            'menu_order' => 0,
            'position' => 'normal',
            'style' => 'default',
            'label_placement' => 'top',
            'instruction_placement' => 'label',
            'hide_on_screen' => '',
            'active' => 1,
            'description' => '',
        ));
    }


    5bdf2b7b97bb6174973737.png
    Ответ написан
    3 комментария
  • Как поменять слово Download на Скачать?

    san_jorich
    @san_jorich
    Творческий кодер
    Несколько вариантов на выбор:
    1. Самый "топорный"и неправильный: Посмотрите кусок кода, где выводится кнопка и замените текст "вручную"
    2. Создайте небольшой php-jquery плагин, заменяющий текст в div или кнопке (по картинке не понятно что это). Строк кода не более 10-ти
    3. Посмотрите как создавать переводы. Создайте и подключите перевод

    Накидаю пример второго варианта:
    <?php
    /*
    Plugin Name: Download_Text_Replacement
    Plugin URI: https://toster.ru/q/574707
    Description: Плагин, заменяющий текст "Download" на "Скачать"
    */
    function js_includer() {  wp_register_script('replacement', plugins_url('js.js', __FILE__)); wp_enqueue_script('replacement');} add_action( 'wp_enqueue_scripts', 'js_includer' ); /*Конечно, существует вариант с подключением в footer, но это крайне не праведное решение*/
    ?>

    В корневом каталоге создайте файл js.js c следующим кодом
    jQuery(document).ready(function(){
    	jQuery('#id_div_с_текстом')).contents(':contains("Download")')[0].nodeValue ='"Скачать"'); // Если это DIV
    	jQuery('#id_вашей_кнопки').val('Скачать'); // Если это button
    });


    // Внимание! Код приведен в качестве примера и требует правки и доработки
    Ответ написан
    Комментировать
  • Как перенести сайт с WordPress на локальный сервер?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Не важно переносите ли вы сайт на локалку или на удаленный сервер. Прежде всего у вас должен быть развернут локальный сервер. Есть готовые решения OSPanel (рекомендую) или Denwer. Можно еще самому развернуть apache + mysql + php или lamp на виртуалке)))

    Что касается самого переноса -
    скопируйте все содержимое из папки public_html (если такая имеется) - а именно все файлы и все папки (wp-content, wp-includes, wp-admin и все файлы). Далее залейте их на локалку (см. инструкции к OSPanel). После чего экспортируйте БД (если у вас нет доступа к базе данных или к phpmyadmin, то вы можете экспортировать БД через фтп. Для этого залейте скрипт phpminiadmin.php или SQLBuddy в корень фтп и откройте его через веб.). После экспорта БД, замените урлы на ваш вариант, создайте БД на локалке и залейте туда. После этого остается обновить доступ к БД в файле wp-config.php, открыть сайт в браузере и глянуть на корректность переноса.
    Ответ написан
    Комментировать
  • Почему некорректно отображаются страницы на стандартной теме Wordpress?

    Posho
    @Posho
    Frontend-developer
    у вас в коде некоторые файлы подключены по http, когда сайт работает по https — они просто не подтягиваются
    Ответ написан
  • Как создать свои дескрипторы, типа Plugin Name, URI итд?

    san_jorich
    @san_jorich Автор вопроса
    Творческий кодер
    Я уже было начал писать "костыль" с регуляркой типа preg_match( '/^[ \t\/*#@]*' ) когда наткнулся на решение:
    $form_data = get_file_data($file, array('title'=>'Form Title') );

    В нужном файле я написал
    <?/*
    Form Title: Название формы
    */?>

    И вывел это через echo $form_data['title'];
    Ответ написан
    Комментировать
  • Как запустить скрипт в VSC?

    romash
    @romash
    web-разработчик
    Чтобы запустить скрипт в терминале, вам нужен интерпретатор. Для js это NodeJS.
    После установки нужно будет перезагрузить VSC, чтобы она его увидела. Чтобы убедиться в том, что интерпретатор установлен и доступен, вбейте в терминале
    node -v
    эта команда выведет версию установленного NodeJS.
    Чтобы запустить скрипт lesson.js достаточно написать в терминале
    node lesson.js
    или даже
    node lesson

    Правда, учитывая то, что у вас VSC, может быть удобнее воспользоваться ей, чем терминалом (NodeJS всё равно нужно установить):
    Для начала у вас должна быть папка проекта, а не просто файл открытый в VSC (создайте папку, положите туда свои скрипты, которые хотите запускать, в VSC Файл -> Открыть папку и выбирайте созданную папку).
    На левой панели есть кнопка с изображением жука, которая открывает панель отладки. В этой панели сверху у вас будет написано "Нет конфигурации". Вам нужно нажать на шестерёнку рядом, если появится выбор, выбрать Node. Будет создан файл конфигурации отладки, после чего сможете смело открывать свои скрипты, ставить точки останова, нажимать в панели отладки зелёную стрелочку и радоваться.
    Ответ написан
    Комментировать
  • Как реализовать вывод списка рубрик кастомной записи?

    @cema93
    WordPress разработчик
    <?php
    $terms = get_terms( array(
    	'taxonomy'      => 'category',
    	'orderby'       => 'name', 
    	'hide_empty'    => false, 
    	'count'         => false,
    	'hierarchical'  => true, 
    ) );
    $terms = wp_list_filter( $terms, array('parent'=>0) ); // Если надо вывести только рубрики верхнего уровня
    ?>
    			<?php
    				if( $terms && ! is_wp_error($terms) ){
    					foreach( $terms as $term ){
    						echo "<a href='". get_term_link( (int) $term->term_id, 'category' ) ."'>". $term->name ."</a>";
    					}
    				}
    			?>
    Ответ написан
    Комментировать
  • Смена статуса заказа в Прямом банковском переводе, как отменить?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У WooCommerce есть динамический хук woocommerce_thankyou_{payment_method}, который срабатывает после оформления заказа. Это позволяет таргетировать конкретный метод оплаты, как в вашем случае:
    function bacs_order_status( $order_id ) 
    {
        $order = wc_get_order( $order_id );
    
        if ( in_array( $order->get_status(), [ 'on-hold', 'pending',  ] ) ) {
            $order->update_status( 'processing' );
        } else {
            return;
        }
    }
    add_action( 'woocommerce_thankyou_bacs', 'bacs_order_status', 10, 1 );

    Меняйте на нужный вам статус.
    Ответ написан
    2 комментария
  • Коррекция функциии для загрузки дополнительных записей на странице?

    KusokBanana
    @KusokBanana
    Fullstack-разработчик
    Вместо события нажатия поставь такое событие
    Таким образом, как только футер покажется внизу экрана сработает условие
    При этом оно не будет выводиться постоянно благодаря флагу seeFooter
    С позицией экрана относительно футера уже можешь играться с помощью переменной размера экрана window.screen.height
    var seeFooter = false;
    $(window).scroll(function(){
      var $element = $('#footer');
      if ($(this).scrollTop() + window.screen.height >= $element.offset().top) {
        if (!seeFooter) {
          console.log('Футер показался снизу');
          seeFooter = true;
        }
      } else {
        seeFooter = false;
      }
    });
    Ответ написан
    Комментировать
  • Как сделать кнопку вывода постов "Загрузить ещё"?

    HectorPrima
    @HectorPrima
    программист
    Вот шаблон для своих типов записей с пагинацией. Если в пагинации убрать get_previous_posts_link а в get_next_posts_link написать 'Ещё' - будет то что вам нужно.
    <?php
    /*
    Template Name: Simple post 2 Loop page
    */
    ?>
    <?php get_header(); ?>
    
    <?php
    
    if ( get_query_var('paged') ) {
        $paged = get_query_var('paged');
    } elseif ( get_query_var('page') ) { // 'page' is used instead of 'paged' on Static Front Page
        $paged = get_query_var('page');
    } else {
        $paged = 1;
    }
    
    $custom_query_args = array(
        'post_type' => 'post', 
        'posts_per_page' => get_option('posts_per_page'),
        'paged' => $paged,
        'post_status' => 'publish',
        'ignore_sticky_posts' => true,
        //'category_name' => 'custom-cat',
        'order' => 'DESC', // 'ASC'
        'orderby' => 'date' // modified | title | name | ID | rand
    );
    $custom_query = new WP_Query( $custom_query_args );
    
    if ( $custom_query->have_posts() ) :
        while( $custom_query->have_posts() ) : $custom_query->the_post(); ?>
    
            <article <?php post_class(); ?>>
                <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
                <small><?php the_time('F jS, Y') ?> by <?php the_author_posts_link() ?></small>
                <div><?php the_excerpt(); ?></div>
            </article>
    
        <?php
        endwhile;
        ?>
    
        <?php if ($custom_query->max_num_pages > 1) : // custom pagination  ?>
            <?php
            $orig_query = $wp_query; // fix for pagination to work
            $wp_query = $custom_query;
            ?>
            <nav class="prev-next-posts">
                <div class="prev-posts-link">
                    <?php echo get_next_posts_link( 'Older Entries', $custom_query->max_num_pages ); ?>
                </div>
                <div class="next-posts-link">
                    <?php echo get_previous_posts_link( 'Newer Entries' ); ?>
                </div>
            </nav>
            <?php
            $wp_query = $orig_query; // fix for pagination to work
            ?>
        <?php endif; ?>
    
    <?php
        wp_reset_postdata(); // reset the query 
    else:
        echo '<p>'.__('Sorry, no posts matched your criteria.').'</p>';
    endif;
    ?>
    
    <?php get_footer(); ?>
    Ответ написан
    2 комментария
  • Существует ли плагин для Woocommerce - купи 5 раз и на 5-тый раз получи подарок?

    ILoveYAnny
    @ILoveYAnny Автор вопроса
    1) Качаем https://srd.wordpress.org/plugins/first-order-discount/

    2) Правим код плагина ( у меня тут ещё +10% скидка для зарегестрированных пользователей)
    function first_order_add_fee() {
    	global $wpdb, $woocommerce;
    	if ( is_user_logged_in() ) {
    		$customer_id = get_current_user_id();
    		$orderNumCheck = wc_get_customer_order_count( $customer_id ); // count orders by current customer
    		$options = get_option( 'first_order_add_settings' );
    		$discountType = $options['first_order_choose'];
    		$discountValue = $options['first_order_add_value'];
    		$subtotal = WC()->cart->cart_contents_total;
    		$discount = $discountValue/100;
    	    
    		$check5order = $orderNumCheck + 1;
    		
    		if ($check5order % 5 == 0) {
    		
    			    $product_id = 1802;
    				$found = false;
    				//check if product already in cart
    				if ( sizeof( WC()->cart->get_cart() ) > 0 ) {
    					foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
    						$_product = $values['data'];
    						if ( $_product->id == $product_id )
    							$found = true;
    					}
    					// if product not found, add it
    					if ( ! $found )
    						WC()->cart->add_to_cart( $product_id );
    				} else {
    					// if no products in cart, add it
    					WC()->cart->add_to_cart( $product_id );
    				}
    		}
    		
    		WC()->cart->add_fee( 'Скидка 10%', -$subtotal*$discount );
    		
    	}
    }
    
    function add_custom_price( $cart_object ) {
        foreach ( $cart_object->cart_contents as $key => $value ) {
    		if ($value["product_id"] == "1802") {
    			$currPrice = $value['data']->price;
    			$currQuant = $value["quantity"];
    			$totalPrice = $currPrice * $currQuant;
    			$salePrice = $totalPrice - $currPrice;
    			$salingPrice = $salePrice/$currQuant;
    			$value['data']->price = $salingPrice;
    		}
        }
    }
    
    add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
    add_action( 'woocommerce_cart_calculate_fees','first_order_add_fee' );
    Ответ написан
    Комментировать
  • Всплывающая подсказка для цены woocommerc wordpress, как сделать?

    Vnevremen
    @Vnevremen
    digital designer


    Если сообщение у всех товаров разное, то нужно создать кастомное поле, например плагином ACF или аналогичным.

    Для человека с такими титулами как у вас: "frontend html+css+JS+php" это пятиминутная задача))
    Ответ написан
    8 комментариев
  • Неужели woocommerce можно установить только на удаленный сервер?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте.
    Проблема не в вукомерц, а в ваших настройках локального сервера. Для установки из репозитория у вас должен быть настроен фтп доступ.

    Другое решение - define('FS_METHOD','direct');
    https://www.hongkiat.com/blog/update-wordpress-wit...
    Ответ написан
    1 комментарий
  • Как вывести артикул товара (SKU) в название товара, title и description в woocommerce?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Условно разделим ваш вопрос на 2 части:
    1) Выведем артикул в названии.
    - скопируйте шаблоны вукомерца в вашу тему, согласно кодексу. (содержимое папки templates качаете и заливаете в папку woocommerce в корень темы)
    - откройте functions.php
    добавьте - https://gist.github.com/lukecav/26f6e6396c4a9c40d9...
    2) добавление sku в url
    https://wordpress.stackexchange.com/questions/1461...
    https://wordpress.stackexchange.com/questions/3507...
    Ответ написан
    2 комментария