• Как правильно править файлы Opencart?

    rim89
    @rim89
    программист-велосипедист
    В идеале все делать через дополнения. Но из за большого объема работ многие правят напрямую - так проще и быстрее. Что затруднит обновления.
    Ответ написан
    5 комментариев
  • Как построить свой рабочий день фрилансеру?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    3 комментария
  • Почему при отключении обновлений тормозит админка Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Потому что не так отключаете. Ваш код (а точнее код с просторов сети) делает кучу всего, и делает это не совсем правильно. Для отключения апдейтов (что, кстати, не рекомендуется), есть константы в wp-config.php.
    // Отключить все обновления
    define( 'AUTOMATIC_UPDATER_DISABLED', true );

    Подробнее тут.

    Если же необходимо запретить обновление плагинов вручную, то должно хватить вот этого:
    add_action( 'site_transient_update_plugins', '__return_false' );

    Не тестил, но должно работать. Дело в том, что pre_site_transient_update_plugins - это фильтр, который срабатывает перед тем, как transient будет сохранен. site_transient_update_plugins - это экшн, который вызывается сразу после того, как transient был сохранен. Поэтому они работают по разному. Фильтр - возращает измененное значение, которое сохраняется в transient. Экшн выполняет действие после сохранения.

    Опять же, я не тестировал, но по логике это не предотвратит саму проверку обновлений. Не будет выводиться информация о наличии обновления и предложение обновиться. Но сами проверки будут улетать. Первое, что приходит в голову, что можно сделать для блокирования самих проверок - это хукаться на http_request_args, и проверять куда готовится запрос. Если это на сервер обновлений - то блокируем запрос до того, как он был отправлен.
    Ответ написан
    3 комментария
  • Как правильно одно меню разместить в двух местах на Wordpress?

    Punkie
    @Punkie
    wp-kama.ru/function/wp_nav_menu

    Для шапки
    <?php wp_nav_menu( array( 'theme_location' => 'menu-1', 'menu_id' => 'menu-header' ) ); ?>


    Для футера
    <?php wp_nav_menu( array( 'theme_location' => 'menu-1', 'menu_id' => 'menu-footer' ) ); ?>


    Но вообще правильнее делать два разных меню. В будущем вы возможно захотите сделать разный набор ссылок для этих еню - придётся переделывать шаблон.
    Ответ написан
    2 комментария
  • Как правильно одно меню разместить в двух местах на Wordpress?

    vladislav_boychenko
    @vladislav_boychenko
    Купаюсь в гривнах
    Делайте, как и хотели, просто в аргументах укажите другой id или class. То есть верхнее меню:
    <?php wp_nav_menu( array( 'theme_location' => 'menu-1', 'menu_id' => 'primary-menu' ) ); ?>

    Нижнее меню:
    <?php wp_nav_menu( array( 'theme_location' => 'menu-1', 'menu_id' => 'footer-menu' ) ); ?>
    Ответ написан
    1 комментарий
  • Как в Woocommerce добавить свою единицу измерения?

    @aarty20
    Front-end / Wordpress developer
    Как вариант (костыльный причем), можете сами в коде изменить - файл product-attributes.php, 'get_option( 'woocommerce_weight_unit' )' замените на 'мл', и на фронте будет нужная величина измерения.
    Ответ написан
    2 комментария
  • Как вывести дочерние рубрики с постами?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    <?php
    $args=array(
        'orderby' => 'name',
        'order' => 'ASC',
        'child_of' => 8, // ID родительской рубрики "Услуги"
        'hide_empty' => false
    );
    $categories=get_categories($args);
    foreach($categories as $category) : ?>
        <div class="sertvices-cat">
            <a href="<?php echo get_category_link( $category->term_id )?>" title="<?php printf( __( "View all posts in %s" ), $category->name ) ?>"><?php echo $category->name; ?></a>
            <p><?php echo $category->description; ?></p>
        </div>
        <?php $args = array(
            'cat' => $category->term_id,
            'posts_per_page' => 4,//или сколько нужно
        );
        $my_posts = new WP_Query($args);
        if ($my_posts->have_posts()) :?>
           <div>
               <?php while($my_posts->have_posts()) : $my_posts->the_post();?>
                   Вывод постов
                <?php endwhile;
               wp_reset_postdata();?>
           </div>
        <?php endif;?>
    <?php endforeach;?>


    Попробуй так
    Ответ написан
    1 комментарий
  • Как в Wordpress сделать выпадающее меню в три колонки?

    @mibo
    Стандартный путь:
    1. Верстаете меню
    2. Создаете в wp древовидную структуру в разделе меню с классами для пунктов меню и родителей согласно вашей верстке.
    Или же используйте плагины мега меню для wp.
    Ответ написан
    1 комментарий
  • Как генерировать файл json для yandex map на вордпресс?

    kiselev-webmaster
    @kiselev-webmaster Автор вопроса
    решил вопрос. Может кому пригодится:
    <?php 
    	require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );
    	global $post;
    	global $wpdb;
    ?>
    <?php $markers = get_posts ('post_type=markers&order=ASC'); ?> 
    <?php $arr = array(); ?>
    	<?php if ($markers) :?>
    		<?php foreach ($markers as $post) : setup_postdata ($post); ?>
    			<?php 
    				$arr[get_the_ID()]['type'] = 'Feature';
    				$arr[get_the_ID()]['id'] = '0'; 
    				$arr[get_the_ID()]['geometry']['type'] = 'Point'; 
    				$arr[get_the_ID()]['geometry']['coordinates'] = array(55.831903, 37.411961); 
    				$arr[get_the_ID()]['properties']['balloonContent'] = 'Содержимое балуна';
    				$arr[get_the_ID()]['properties']['clusterCaption'] = 'Еще одна метка'; 
    				$arr[get_the_ID()]['properties']['hintContent'] = 'Текст подсказки';
    			?>
    		<?php endforeach; ?>
    	<?php endif; ?>
    <?php wp_reset_postdata(); ?>
    
    <?php
    	$array = array(
    		"type" => "FeatureCollection",
    		"features" => array_values($arr)
    	);
    ?>
    <?php echo json_encode($array); ?>


    код ни идиален, комментарии и замечания приветствуются)
    Ответ написан
    Комментировать
  • Куда делся текст кнопки WooCommerce?

    Redjek
    @Redjek
    Множество историй, коль желаешь расскажу!
    Вообще эта кнопка выводиться из файла /cart/mini-cart.php там то у вас что?
    <a href="<?php echo esc_url( wc_get_cart_url() ); ?>" class="button wc-forward"><?php _e( 'View Cart', 'woocommerce' ); ?></a>
    Ответ написан
    1 комментарий
  • Как в Bootstrap отключить стандартное выпадающее меню?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    удали data-toggle="dropdown" у ссылки
    Ответ написан
    3 комментария
  • Как в woocommerce при входе в личный кабинет вместо консоли открыть страницу редактирования аккаунта?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    По умолчанию при открытии страницы My Account в WooCommerce, если пользователь не авторизован, ему предлагается Login / Register. После входа остается тот же url, та же страница My Account, но уже с личными данными - Dashboard (но не Dashboard админки WordPress). Урл по умолчанию там /my-account/, а не dashboard.php.

    Что касается переадресации на /my-account/edit-account/, то делается она так:
    function woo_login_redirect( $redirect_to ) {
    
         $redirect_to = wc_customer_edit_account_url();
         return $redirect_to;
    
    }
    add_filter( 'woocommerce_login_redirect', 'woo_login_redirect' );

    PS: Люди, не усложняйте. Всегда, в первую очередь проверяйте возможности движка (в данном случае - в порядке WooCommerce, потом сам WordPress) и не городите костыли. Ведь вполне логично предположить, что у WooCommerce, который натыкан хуками под завязку, есть свой хук на редирект после логина, простой поиск по документации вам его и выдаст. То же касается получения стандартного endpoint вукоммерса - вполне разумно предположить, что у Woo есть хелперы для получения стандартных урл, например wc_customer_edit_account_url(). При таком подходе вы получаете надежное решение, которое не перестанет работать, если клиент в админке отредактирует slug эндпоинта личного кабинета, или какой-то плагин его подменит.

    UPDATE 2018: Код можно немного сократить и упростить, поскольку редирект у нас всегда принудительный и дополнительных проверок не предвидится:
    /**
     * Always redirect user to "Edit Account" page after login.
     * 
     * @return string Target URL
     */
    function woo_login_redirect()
    {
    	return wc_customer_edit_account_url();
    }
    add_filter( 'woocommerce_login_redirect', 'woo_login_redirect' );


    Если не предполагается вставлять это в публичную тему или предоставлять возможность другим отключить данный фильтр, можно записать в виде closure:

    /**
     * Always redirect user to "Edit Account" page after login.
     * 
     * @return string Target URL
     */
    add_filter( 'woocommerce_login_redirect', function() {
        return wc_customer_edit_account_url();
    } );
    Ответ написан
  • Правильно ли я использую Theme Customizer в Wordpress?

    OtshelnikFm
    @OtshelnikFm Куратор тега WordPress
    Обо мне расскажет yawncato.com
    customizer.js нужен для просмотра без обновления iframe
    Ответ написан
    5 комментариев
  • Почему ссылка не выравнивает текст внутри по вертикали как button?

    @indigo_style
    Вот через flex Тут
    или вам нужно было объяснение почему там не выравнивает содержимое по вертикали?
    Ответ написан
    3 комментария
  • Как из Bootstrap удалить container-lg?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Берем sass версию, комментируем строки 19-21 в grid.scss
    https://github.com/twbs/bootstrap-sass/blob/master...
    ну и заодно 82-84
    https://github.com/twbs/bootstrap-sass/blob/master...
    компилируем, радуемся.
    Ответ написан
    Комментировать
  • Как вывести атрибуты товара woocommerce в списке товаров?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Попробуйте так.

    add_action( 'woocommerce_after_shop_loop_item_title', 'show_attributes', 20 );
     
    function show_attributes() {
    global $product;
    if ($product->product_type == 'variable') {
            $attributes = $product->get_attributes();?>
            <ul>
                <?php  $variations_ids = $product->get_children();
                foreach ($variations_ids as $variation_id) {
                    $variation = $product->get_child($variation_id);
                    $variation_data = $variation->get_variation_attributes();
                    $attributes     = $variation->parent->get_attributes();
                    $description    = array();
                    $attr_name        = '';
    
                    if ( is_array( $variation_data ) ) {
    
                        foreach ( $attributes as $attribute ) {
    
                            if ( ! $attribute[ 'is_variation' ] ) {
                                continue;
                            }
    
                            $variation_selected_value = isset( $variation_data[ 'attribute_' . sanitize_title( $attribute[ 'name' ] ) ] ) ? $variation_data[ 'attribute_' . sanitize_title( $attribute[ 'name' ] ) ] : '';
                            $description_name         = esc_html( wc_attribute_label( $attribute[ 'name' ] ) );
                            $description_value        = __( 'Any', 'woocommerce' );
    
                            if ( $attribute[ 'is_taxonomy' ] ) {
    
                                $post_terms = wp_get_post_terms( $variation->id, $attribute[ 'name' ] );
    
                                foreach ( $post_terms as $term ) {
                                    if ( $variation_selected_value === $term->slug ) {
                                        $description_value = esc_html( apply_filters( 'woocommerce_variation_option_name', $term->name ) );
                                    }
                                }
    
                            } else {
    
                                $options = wc_get_text_attributes( $attribute[ 'value' ] );
    
                                foreach ( $options as $option ) {
    
                                    if ( sanitize_title( $variation_selected_value ) === $variation_selected_value ) {
                                        if ( $variation_selected_value !== sanitize_title( $option ) ) {
                                            continue;
                                        }
                                    } else {
                                        if ( $variation_selected_value !== $option ) {
                                            continue;
                                        }
                                    }
    
                                    $description_value = esc_html( apply_filters( 'woocommerce_variation_option_name', $option ) );
                                }
                            }
    
                            $description[] =  rawurldecode( $description_value );
    
                        }
                        $attr_name .= implode( '', $description );
    
                    } ?>
                    <li><?php echo $attr_name;?> - <?php echo $variation->get_price_html();?></li>
               <?php } ?>
            </ul>
        <?php }
    }
    Ответ написан
    7 комментариев
  • Существует ли слайдер jQuery, который меняет в css значение background-image?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    таких не видел, но делается простым скриптом.
    просто также суешь img в слайдер, но делаешь им display: none;
    а в скрипте уже для дива в котором находятся твои img задаешь background, который берешь из src
    Ответ написан
    Комментировать
  • Как правильно вывести один пост в wordpress?

    deniscopro
    @deniscopro Куратор тега WordPress
    WordPress-разработчик, denisco.pro
    Доброго.

    Миниатюру записи можно вывести с помощью функции the_post_thumbnail.

    <?php
    global $post;
    $post_id = 9;
    $post = get_post($post_id);
    setup_postdata($post);
    ?>
    
    <?php the_post_thumbnail(); ?>
    <h3><?php the_title(); ?></h3>
    <p><?php the_excerpt(); ?></p>
    <a href="<?php the_permalink(); ?>" class="btn">Подробнее о нас</a>
    
    <?php wp_reset_query(); ?>
    Ответ написан
  • Как правильно вывести один пост в wordpress?

    @Mr_Edward
    Добавьте возможность выбора поста в админке, используя wp_options (раздел Customize в консоле). Из базы потом вытягивайте get_option'om.
    get_option('mainpage'); // id поля опции уже сами выберите

    И очистить пост не забудьте после вывода, дабы не было конфликтов.

    В Вашем случае, примерно так (functions.php):
    <?php
    
    class Toster_Theme_Customize{
    
        public static function init()
        {
            $customize = new Toster_Theme_Customize();
            add_action( 'customize_register', array($customize, 'customizeRegister') );
        }
    
        public function customizeRegister( $wp_customize )
        {
            $wp_customize->add_section(
                'theme_option', // id секции
                array(
                    'title'     => __('Theme Options', "interia"),
                    'priority'  => 1
                )
            );
    
            if ( get_pages() ) {
    
                $wp_customize->add_setting( 'mainpage', array(
                    'type'       => 'option',
                    'capability' => 'manage_options',
                ) );
    
                $wp_customize->add_control( 'mainpage', array(
                    'label'      => __( 'Main page', "interia" ),
                    'section'    => 'theme_option',
                    'type'       => 'dropdown-pages',
                ) );
            }
        }
    }
    Toster_Theme_Customize::init();
    Ответ написан
    7 комментариев
  • Это хорошая стратегия вёрстки?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    это техника не для новичков. когда ты научишься создавать дивы и запоминать классы, не смотря в html, и не смотря в браузер после задания каждого стиля - тогда такой способ сильно ускоряет верстку. тобишь ты просто сначала создаешь элементы в dom а потом начинаешь их стилизовать. и из за того что большой опыт - ты уже знаешь наперед какой стиль как и куда поставит тот или иной элемент, не смотря в браузер. тем самым ты просто сразу пишешь стили для 10 элементов вслепую, а потом только смотришь и правишь если вдруг все же ошибся где то. и так далее
    Ответ написан
    1 комментарий