Ответы пользователя по тегу WordPress
  • Почему не работает Contact Form 7?

    Потому что вы, находясь на https , скрипт пытаетесь загрузить по http (о чем вам и говорит ошибка). В контектсе вашего вопроса, вам нужно в настройках Wordpress изменить адрес сайта своего с использованием https.
    Ответ написан
    Комментировать
  • Исключить из кэширования wordpress определенный блок(div)?

    Такое невозможно, так как страница кешируется целиком. Если вам нужен динамический блок, проще всего добавить такую функиональность с помощью Javascript.
    Ответ написан
    Комментировать
  • Что не так, откуда эти ошибки?

    Судя по вашей ошибке, где-то в скриптах (functions.php) вы либо делаете редирект, либо вызываете такую функцию:
    header("Location: http://www.example.com/");

    Ну и в общем, у вас есть номера строк, где возникают ошибки.
    Ответ написан
    Комментировать
  • Как передать id рубрики через ajax?

    добавить поле в форму, например:
    <input type="hidden" name="category_id" value="<?=$cat->id;?>" ?>

    Вместо
    $cat->id;, пишите свой вывод id категории.
    Ответ написан
    1 комментарий
  • Каким образом реализуется подписка на новости сайта через телегу?

    Расписываю алгоритм как это делал я:
    1. Создается бот.
    2. Если пользователь хочет подписаться на что-то, он должен авторизоваться в боте.
    3. Создаете ему ключ, создаете команду, например /auth {key}, где key - ключ пользователя.
    4. Бот принимает сообщение с ключем, выделяет его и по данному ключу находит id пользователя у вас на сайте, для него сохраняет полученный от этого пользователя chat_id (когда пользователь отправляет вам сообщение в первый раз).
    5. Все, теперь вы храните chat_id пользоваетелей и можете любому из них отправлять сообщения ботом.

    Следующая задача: выбирать что отправлять и как отправлять.

    6. Пользователь подписывается например, на категорию. Вы должны в таблице, например user_subscribes хранить user_id и category_id. Затем когда в категории с id = category_id у вас постится публикация, из этой таблицы вы берете все user_id, с category_id = категории, в которой появился пост. Если такие пользователи есть, то по их user_id получаете chat_id, на данные chat_id через цикл, с паузой (апи телеграма позволяет только определенное кол-во запросов в минуту), отправляете сообщения, с помощью метода api телеграмма, sendMessage по-моему.
    7. На этом все. Ваш бот будет отправлять сообщения только тем, кто подписывался на данные материалы.

    Делал подобный функционал давно на laravel, возможно сейчас есть более адекватные варианты.
    Ответ написан
  • Как создать новую страницу при создании поста?

    Вам нужно в functions.php добавить свою функцию в хук save_post, в которой вызывать функцию wp_insert_post с данными для нового поста.

    Коротко: при создании поста срабатывает хук save_post, в котором и будет выполняться ваша функция для создания поста. Почитайте документацию по ссылкам выше, разберетесь.
    Ответ написан
    Комментировать
  • Как получить ссылки на товары при оформлении заказа?

    Скорее всего это:
    // Get an instance of the WC_Order object
    $order = wc_get_order($order_id);
    
    // Iterating through each WC_Order_Item_Product objects
    foreach ($order->get_items() as $item_key => $item_values):
    
        ## Using WC_Order_Item methods ##
    
        // Item ID is directly accessible from the $item_key in the foreach loop or
        $item_id = $item_values->get_id();
    
        ## Using WC_Order_Item_Product methods ##
    
        $item_name = $item_values->get_name(); // Name of the product
        $item_type = $item_values->get_type(); // Type of the order item ("line_item")
    
        $product_id = $item_values->get_product_id(); // the Product id
        $wc_product = $item_values->get_product(); // the WC_Product object
        ## Access Order Items data properties (in an array of values) ##
        $item_data = $item_values->get_data();
    
        $product_name = $item_data['name'];
        $product_id = $item_data['product_id'];
        $variation_id = $item_data['variation_id'];
        $quantity = $item_data['quantity'];
        $tax_class = $item_data['tax_class'];
        $line_subtotal = $item_data['subtotal'];
        $line_subtotal_tax = $item_data['subtotal_tax'];
        $line_total = $item_data['total'];
        $line_total_tax = $item_data['total_tax'];
    
    endforeach;
    Ответ написан
  • Как реализовать в Woocommerce ползунок выбора товара?

    Можно, ничего сложного в этом нет. Берете обычный jquery ui slider например. При перемещении ползунка просто получаете значение цены с вашего сайта (причем не из блока с ценой, в из скрытого поля, например, чтобы хранить всегда первоначальную цену) и умножаете на кол-во цветов, которое пользователь выбрал на ползунке, после подсчета вставляете полученное значение цены в ваш блок с ценой (не в скрытый блок, а в блок, где показывается цена). Все.

    Для этого не нужно воротить внутренности вукомерса. Достаточно просто написать скрипт, ах да, не забудьте хранить и передавать кол-во выбранных цветов пользователем.
    Ответ написан
    Комментировать
  • Нужен хороший, функциональный плагин review (отзывов), кто знает?

    Писал ответ уже в этом посте. То что вам нужно, остается добавить только возможность загрузки фотографий.
    Ответ написан
    Комментировать
  • Плагин для добавления автоматических отзывов WordPress?

    Обычно свои наработки не выкладываю, но вот держите:

    Сама html-форма:
    html-код
    <form class="form-wrapper reviews-form" id="reviews-form">
    					<h3>Оставить отзыв</h3>
    					<div class="reviews-form__row">
    						<div class="form-wrapper__group">
    							<input type="text" name="name" value="" placeholder="Ваше имя" required>
    						</div>
    						<div class="form-wrapper__group">
    							<input type="text" name="email" value="" placeholder="Ваш e-mail" required>
    						</div>
    						<div class="reviews-form__mark-wrapper">
    							<ul class="reviews-form__marks-list">
    								<li><button class="green" data-review-mark="positive"><img src="<?php echo get_template_directory_uri(); ?>/images/svg/happy.svg" alt="Положительный" class="svg"></button></li>
    								<li><button class="yellow" data-review-mark="medium"><img src="<?php echo get_template_directory_uri(); ?>/images/svg/surprised.svg" alt="Удовлетворительный" class="svg"></button></li>
    								<li><button class="red" data-review-mark="negative"><img src="<?php echo get_template_directory_uri(); ?>/images/svg/sad.svg" alt="Отрицательный" class="svg"></button></li>
    							</ul>
    						</div>
    					</div>
    					<div class="reivews-form__message-wrapper">
    						<textarea name="message" placeholder="Ваш отзыв" required></textarea>
    						<input type="hidden" name="rating" value="" required>
    					</div>
    					<button type="submit" class="button button--green">Оставить отзыв</button>
    				</form>

    Обработчики форм:
    /**
          * @module       Marks
          * @description  Выставление оценки в форме
          */
         $('button[data-review-mark]').on('click',function(e){
           e.preventDefault();
           $('button[data-review-mark]').removeClass('active');
           $(this).addClass('active');
           $('#reviews-form').find('[name="rating"]').val($(this).attr('data-review-mark'));
         });

    /**
         * @module       Добавление отзыва
         * @description  Добавление отзыва
         */
        $('#reviews-form').submit(function(e) {
          e.preventDefault();
          $.ajax({
            type: "POST",
            url: "/api/newreview.php",
            data: $(this).serialize(),
            success: function(){
              $('#successreviewmodal').modal('show');
            },
            error: function() {
              $('#errormodal').modal('show');
            }
          });
        });



    Так как запрос отсылается на /api/newreview.php, то по этому адресу у вас должен располагаться этот файл со следующим кодом:

    Код newreview.php:
    <?php
    ini_set("display_errors",1);
    error_reporting(E_ALL);
    
    // *
    // Подключаем все файлы для работы
    // *
    require_once( $_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    require_once( ABSPATH . 'wp-admin/includes/file.php' );
    require_once( ABSPATH . 'wp-admin/includes/media.php' );
    
    
    $user_name = trim($_POST['name']);
    $user_mail = trim($_POST['email']);
    $message = trim($_POST['message']);
    $rating  = trim($_POST['rating']);
    
    $post_data = array(
    	'post_title'    => 'Отзыв #' . uniqid(),
    	'post_content'  => $message,
    	'post_status'   => 'pending',
    	'post_author'   => 1,
      'post_type'     => 'reviews'
    );
    
    // Вставляем запись в базу данных
    $post_id = wp_insert_post( $post_data );
    // *
    // Добавляем все дополнительные поля
    // *
    update_field( 'rating', $rating, $post_id );
    update_field( 'author', $user_name, $post_id );
    update_field( 'e-mail', $user_email, $post_id );
    
    
    
    ?>



    Так как у нас пост добавляется в кастомный тип записей, нужно его сначала создать. Для этого в файл functions.php добавляем следующее:

    Кастомный тип записей
    /**
     * Кастомный тип записей:  Отзывы
     */
    function create_posttype_reviews() {
      register_post_type( 'reviews',
        array(
          'labels' => array(
            'name' => __( 'Отзывы' ),
            'singular_name' => __( 'Отзывы' )
          ),
          'public' => true,
          'has_archive' => false,
          'rewrite' => array('slug' => 'reviews'),
        )
      );
    }
    add_action( 'init', 'create_posttype_reviews' );



    На этом все. В админке wordpress у вас появится новый блок меню "Отзывы", куда и будут попадать все отзывы. В качестве бонуса, могу вам прикрепить код, который надо поместить в functions.php, благодаря которому, боявится балун с количеством неопубликованных отзывов (так проще их отслеживать):

    php код
    /**
     * Уведомления о новых неопубликованных постах
     */
    
    add_action( 'admin_menu', 'add_user_menu_bubble' );
    function add_user_menu_bubble(){
    	global $menu;
    
    	// Отзывы
    	$count = wp_count_posts('reviews')->pending; // на подтверждении
    	if( $count ){
    		foreach( $menu as $key => $value ){
    			if( $menu[$key][2] == 'edit.php?post_type=reviews' ){
    				$menu[$key][0] .= ' <span class="awaiting-mod"><span class="pending-count">' . $count . '</span></span>';
    				break;
    			}
    		}
    	}
    }



    P.S не забудьте проверять всю информацию, поступающую от клиента.

    UPD: забыл добавить, чтобы отзывы где-то выводились, вам нужно в каком-то месте шаблона их вывести:

    WP Loop
    <?php
    							$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    							query_posts(array(
    								'post_type' => 'reviews',
    								'posts_per_page' => -1,
    								'paged' => $paged,
    							));
    						?>
    						<?php if ( have_posts() ) : ?>
    							<?php $i = 1; ?>
    							<?php while ( have_posts() ) : the_post(); ?>
    								<div class="col-lg-6">
    									<?php echo get_template_part('template-parts/content','review'); ?>
    								</div>
    								<?php $i++; ?>
    
    
    							<?php endwhile; ?>
    						<?php endif; ?>
    						<?php wp_reset_postdata(); ?>



    Так же прошу заметить, что при добавлении нового отзыва (файл newreview.php), в этом блоке кода:
    $post_data = array(
    	'post_title'    => 'Отзыв #' . uniqid(),
    	'post_content'  => $message,
    	'post_status'   => 'pending',
    	'post_author'   => 1,
      'post_type'     => 'reviews'
    );

    указано: 'post_status' => 'pending',, что означает добавление всех новых отзывов со статусом На модерации, если нужно отключить эту настройку, то поставьте 'post_status' => 'publish',
    Ответ написан
    7 комментариев
  • Необычный калькулятор для сайта, как реализовать?

    Берете Bootstrap Tabs, пихаете эти табы в форму, на самый последний таб вешаете кнопку с отправкой формы, на все остальные табы вешаете кнопку для перехода к следующему табу (обработчик там в 2 строчки). На этом вся "необычность" заканчивается.
    Ответ написан
    Комментировать
  • Как в woocommerce сделать SMS-информирование и E-mail?

    Крепите свою функцию на хук создания нового заказа и все:
    add_action( 'woocommerce_new_order', 'create_invoice_for_wc_order',  1, 1  );
    function create_invoice_for_wc_order( $order_id ) {
        $order = new WC_Order( $order_id );
        $items = $order->get_items();
        // etc...
    }

    получаете таким образом e-mail продавца, телефон и все что угодно. Далее уже по api отправляете sms через какой-нибудь подобный сервис.
    Ответ написан
    Комментировать
  • Снятие записи с публикации через 2 дня после публикации?

    Не особо знаю как можно запустить таймер для каждого поста, сделайте проще:

    Создаете скрипт, который выводит ID всех постов, у которых дата публикации меньше текущей на два дня.
    Далее весь этот список ID прогоняете через цикл и каждому посту с ID указываете статус: утверждено.

    Запускаете этот скрипт кроном каждый день, либо каждый час.
    Ответ написан
    Комментировать
  • Как сделать заказ в Woocommerce через wp_insert_post()?

    Плохо рыли, либо не знаете как рыть по-английски: первый же сайт из и поискового запроса "programmatically creating new order in woocommerce":
    https://stackoverflow.com/questions/36729701/progr...
    Ответ написан
    Комментировать