01. Проблемы и решения с WordPress

Что-то не работает? Сайт не загружается? Сломалось. Пиши сюда.

Категории

Здравствуйте.. Подскажите как убрать категории под товаром??

H2

Здравствуйте.. Подскажите пожалуйста как сделать так что бы названия товаров перестали быть Н2?

Настроить обновление теми

Всем привет

Есть несколько сайтов на одной самописной теме. Возник вопрос, как можно проще распостранять новие изменения в теме на все сайти. 

Возможно ли обновлять тему не с wordpress.org, а с собственного ресурса?  И как вообще настроить обновление теми? 

Как изменить содержание произвольной записи после создания

Я создаю произвольную запись при помощи wp_insert_post()
Как мне сразу же после создания изменить его содеожимое?

Дополнительный функционал для WooCommerce

Добрый день!

После безуспешных попыток найти исполнителя прошу помощи у специалистов-программистов, специализирующихся на WP.

Есть тема мульти-вендорная Dokan, на ее базе есть сайт – фотосток для фотографов-любителей. 

Требуется написать для сайта функционал со следующими требованиями:
1.Возможность создания товаров загрузкой изображений в галерею

2.Выбор шаблона товара (Будут созданы несколько шаблонов – разница в ценах. Шаблоны не видны в магазине, не видны в товарах продавца, наверное со статусом “на рассмотрении”)

3.Все товары создаются со статусом «на рассмотрение» администратором. Я буду их потом согласовывать. В Докан по умолчанию так и работает.

4.При создании товаров нужно предусмотреть ввод меток товаров (на каждый товар в отдельном блоке

5.При создании товаров нужно предусмотреть выбор категории

6.При создании товаров автоматически создаются миниатюры заданных размеров для скачивания. Ссылки на миниатюры автоматически прописываются в полях соответствующих вариаций.

7.Как создаются миниатюры: по максимальной ширине (высоте). Например WEB 800 px – бОльшая сторона уменьшается до 800 пикселей. Оригинал это оригинал.

8.Превью на сайте создается с водяным знаком – логотип сайта и Имя автора. 

Насколько это реализуемо? Какой для этого нужно предусмотреть бюджет? Есть ли какие-то ограничения в написании такого кода? Если вам есть что предложить, можете написать мне на 401592@gmail.comСпасибо!

Отображение анонсов записей в три колонки

Здравствуйте! Я использовал на сайте следующую конструкцию для отображения анонсов записей в две колонки:

<?php
<div align="left" style="padding:0 20px;">
              <?php if (have_posts()) { 
                query_posts('cat=1');
                $i = 0;
                $per_column = ceil($posts_per_page / 2);
                if ($wp_query->post_count <= $posts_per_page)
                  $per_column = ceil($wp_query->post_count / 2); 
        ?> 
        <div class="column"> 
        <?php while (have_posts()) { 
                the_post(); 
                $i++;
        ?> 
        <div class="thumbnail">
          <?php the_post_thumbnail('thumbnail');?>
        </div>
            <div class="clear"></div>
              <div class="post"> 
                  <a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a>
<?php the_time('d.m.Y'); ?>
                  <?php the_content('ПОДРОБНЕЕ &raquo;'); ?>
                </div><!-- .post --> 
 
        <?php if ($i == $per_column) { ?> 
              </div><!-- .column --> 
     
            
            <div class="column right"> 
        <?php }
            }
          } 
        ?> 
 
          </div><!-- .column --> 
 
          <div class="clear"></div> 
      </div>
  
  </div>
?>

В настоящий момент возникла необходимость расположить анонсы новостей в три колонки, но, к сожалению, моих крайне скромных познаний в PHP не хватает на то, чтобы это самостоятельно сделать.

Невозможность входа на страницу авторизации WordPress

Установил ВордПресс . Решил перейти на страницу авторизации по ссылке “http://ws-kursy.ru/wp-login.php” на своем ноутбуке но получил страницу где было написано, что страница не найдена. На смартфоне все хорошо! 
Что я пробовал сделать: менял провайдера интернета, менял браузеры и отключал брандмауэр. Все это не помогло, как не появлялась страница авторизации  так и не появилась на ноутбуке. Помогите ! Я уже ни чего не могу понять почему ьтакая неоднозначность. На смартфоне я могу войти на страницу авторизации, а на ноутбуке нет! Может у кого-то было такое. Спасибо за помощ. 

Фильтр записей на wordpress

Есть разметка под фильтр записей по категориям. Все бы хорошо, но он сверстан дивами, собственно, как можно реализовать передачу данных о постах на сервер для обработки без использования form и input? Подойдут ли data- атрибуты для этого дела? Или все же переделывать на checkbox?есть вот такой код “Попытка затолкнуть данные о категории в data”

<?php
<div class="center-filter__categories">
    <?php if($terms = get_terms(('category'))) { ?>
        <?php foreach($terms as $term) : ?>
            <?php echo "<div class='center-filter__categories-item center-filter__item' data-id='".$term->term_id."'>".$term->name."</div>"; ?>
        <?php endforeach; ?>
    <?php } ?>
</div>
?>

не понимаю как обработать data

cherry-wizard

Подскажите кто знает выдает ошибку, не могу установить((

Сортировка изображений

Доброго времени суток форумчане сделал плагин на основе коде найденного в просторах тернета который дает возможность добавлять в записи дополнительные фото, появилась необходимость сортировать картинки в заданном порядке для этого добавил переменную $gallery_data[‘image_count’] но как сортировать по ней не могу придумать, может подскажете в какую сторону копать

<?php
add_action( 'admin_init', 'add_post_gallery_so_14445904' );
add_action( 'add_meta_boxes_page', 'add_page_gallery_so_14445904' );
add_action( 'admin_head-post.php', 'print_scripts_so_14445904' );
add_action( 'admin_head-post-new.php', 'print_scripts_so_14445904' );
add_action( 'save_post', 'update_post_gallery_so_14445904', 10, 2 );



/**
 * Add custom Meta Box
 */

// Add meta box to custom posts 
function add_post_gallery_so_14445904() 
{
         
    add_meta_box(
        'post_gallery',
        'Галерея для Tixon',
        'post_gallery_options_so_14445904',
         'post',
        'normal',
        'core'
    );
}



/**
 * Print the Meta Box content
 */
function post_gallery_options_so_14445904() 
{
    global $post;
    $gallery_data = get_post_meta( $post->ID, 'gallery_data', true );

    // Use nonce for verification
    wp_nonce_field( plugin_basename( __FILE__ ), 'noncename_so_14445904' );

    ?>
<?php echo 'Количество элементов > ', count( $gallery_data['image_url'] );?>
    
    <div id="dynamic_form">

        <div id="field_wrap">
        <?php 

        if ( isset( $gallery_data['image_url'] ) ) 
        {
            for( $i = 0; $i < count( $gallery_data['image_url'] ); $i++ ) 
            {
         
            ?>

            <div class="field_row">

              <div class="field_left">
                <div class="form_field">
                  <!--<label>Image URL</label>-->
                  <input type="hidden"
                         class="meta_image_url"
                         name="gallery[image_url][]"
                         value="<?php esc_html_e( $gallery_data['image_url'][$i] ); ?>"
                  />
                  <input type="hidden"
                         class="meta_image_id"
                         name="gallery[image_id][]"
                         value="<?php esc_html_e( $gallery_data['image_id'][$i] ); ?>"
                  />
                </div>
                <div class="form_field" style="margin-bottom: 20px">
                  <label>Описание изображения</label>
                  <textarea
                         class="meta_image_desc"
                         name="gallery[image_desc][]"
                         rows="1"
                         style="width: 100%"><?php esc_html_e( $gallery_data['image_desc'][$i] ); ?></textarea>
                </div>
                       <div class="form_field" style="margin-bottom: 20px">
                  <label>Ссылка на Youtube видео</label>
                  <textarea
                         class="meta_image_desc"
                         name="gallery[href_url][]"
                         rows="1"
                         style="width: 100%"><?php esc_html_e( $gallery_data['href_url'][$i] ); ?></textarea>
                </div>

                <input class="button" type="button" value="Выбрать изображение" onclick="add_image(this)" />&nbsp;&nbsp;&nbsp;
                <input class="button" type="button" value="Удалить" onclick="remove_field(this)" />
              </div>

              <div class="field_right image_wrap">
                <img src="<?php esc_html_e( $gallery_data['image_url'][$i] ); ?>" />
          <input type="text" size="10" class="meta_image_count" name="gallery[image_count][]" value="<?php esc_html_e( $gallery_data['image_count'][$i] );  ?>">
              </div>
              <div class="clear" /></div> 
            </div>
            <?php
            } // endif
        } // endforeach
        ?>
        </div>

        <div style="display:none" id="master-row">
        <div class="field_row">
            <div class="field_left">
                <div class="form_field">
                    <!--<label>Image URL</label>-->
                    <input class="meta_image_url" value=""  name="gallery[image_url][]" />
                    <input class="meta_image_id" value=""  name="gallery[image_id][]" />
                </div>
                <div class="form_field" style="margin-bottom: 20px">
                    <label>Описание изображения</label>
                    <textarea class="meta_image_desc" name="gallery[image_desc][]" rows="3" style="width: 100%"></textarea>
                </div>
                    <div class="form_field" style="margin-bottom: 20px">
                    <label>Ссылка на Youtube видео</label>
                    <textarea class="meta_image_href_url" name="gallery[href_url][]" rows="3" style="width: 100%"></textarea>
                </div>
                <input type="button" class="button" value="Выбрать изображение" onclick="add_image(this)" />&nbsp;&nbsp;&nbsp;
                <input class="button" type="button" value="Удалить" onclick="remove_field(this)" />
            </div>
            <div class="field_right image_wrap">

            <input type="text" size="10" class="meta_image_count" name="gallery[image_count][]" value="">
            </div>
            <div class="clear"></div>
        </div>
        </div>

        <div id="add_field_row">
          <input class="button" type="button" value="Добавить доплнительное поле" onclick="add_field_row();" />
        </div>
        <?php if ( 'trend' == get_post_type( $post->ID ) ) { ?>
        <p style="color: #a00;">Make sure the number if images you add is a <b>multiple of 5</b>.</p>
        <?php } ?>
    </div>
    <?php
}

/**
 * Print styles and scripts
 */
function print_scripts_so_14445904()
{
    // Check for correct post_type
     global $post;
    if( 'post' != $post->post_type )
        return;
    ?>  
    <style type="text/css">
      .field_left {
        float:left;
        width: 85%;
        padding-right: 20px;
        box-sizing:border-box;  
      }
      .field_right {
        float:left;
        width: 15%;
      }
      .image_wrap img {
          max-width: 100%;
          max-height: 200px;
      }
      #dynamic_form input[type=text] {
        width:100%;
      }
      #dynamic_form .field_row {
        border:1px solid #cecece;
        margin-bottom:10px;
        padding:10px;
      }
      #dynamic_form label {
        display: block;
        margin-bottom: 5px;
      }
    </style>

    <script type="text/javascript">
        function add_image(obj) {

            var parent=jQuery(obj).parent().parent('div.field_row');
            var inputField = jQuery(parent).find("input.meta_image_url");
            var inputFieldID = jQuery(parent).find("input.meta_image_id");
            var fileFrame = wp.media.frames.file_frame = wp.media({
                multiple: false
            });
            fileFrame.on('select', function() {
                var selection = fileFrame.state().get('selection').first().toJSON();
                inputField.val(selection.url);
                inputFieldID.val(selection.id);
                jQuery(parent)
                .find("div.image_wrap")
                .html('<img src="'+selection.url+'" />');
            });
            fileFrame.open();
        //});
        };

        function remove_field(obj) {
            var parent=jQuery(obj).parent().parent();
            parent.remove();
        }

         function add_field_row() {
            var row = jQuery('#master-row').html();
            jQuery(row).appendTo('#field_wrap');
        }
    </script>
    <?php
}

/**
 * Save post action, process fields
 */
function update_post_gallery_so_14445904( $post_id, $post_object ) 
{
    // Doing revision, exit earlier **can be removed**
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )  
        return;

    // Doing revision, exit earlier
    if ( 'revision' == $post_object->post_type )
        return;

    // Verify authenticity
    if ( !wp_verify_nonce( $_POST['noncename_so_14445904'], plugin_basename( __FILE__ ) ) )
        return;

  if ( 'post' != $_POST['post_type'] ) 
        return;

    if ( $_POST['gallery'] ) 
    {
        // Build array for saving post meta
        $gallery_data = array();
        for ($i = 0; $i < count( $_POST['gallery']['image_url'] ); $i++ ) 
        {
            if ( '' != $_POST['gallery']['image_url'][ $i ] ) 
            {
                $gallery_data['image_url'][]  = $_POST['gallery']['image_url'][ $i ];
                $gallery_data['image_id'][]  = $_POST['gallery']['image_id'][ $i ];
                $gallery_data['image_desc'][] = $_POST['gallery']['image_desc'][ $i ];
                  $gallery_data['href_url'][] = $_POST['gallery']['href_url'][ $i ];
                    $gallery_data['image_count'][] = $_POST['gallery']['image_count'][ $i ];
            }
        }

        if ( $gallery_data ) 
            update_post_meta( $post_id, 'gallery_data', $gallery_data );
        else 
            delete_post_meta( $post_id, 'gallery_data' );
    } 
    // Nothing received, all fields are empty, delete option
    else 
    {
        delete_post_meta( $post_id, 'gallery_data' );
    }
}
?>

Удалить, добавить пост не заходя в админку

Здравствуйте!
Вопрос.
1. Есть список названий постов. Возле каждого названия есть кнопка ”

Удалить”. При клике по кнопке соответствующий пост удаляется без захода в админку, а сразу (пользователь зарегистрированный);
2. При нажатии на кнопку, которая находится на фронт  енде, выпадает поп ап, в котором пользователь указывает название статьи и может при желании еще загрузить pdf файл. При нажатии на кнопку submit  этого попап, на сайте создается запись с указанным названием, а загруженный файл загружается в медиа библиотеку. После этих двух действий в содержимое вновь созданной записи вставляется шорт код в котором используется ссылка на медиа файл PDF, который загрузился в предыдущем шаге.

Подскажите в общих чертах как можно реализовать такой функционал на бекенд.

Мультиязычный сайт с плагином Elementor

Здравствуйте, возникла такая проблема: нужно сделать мультиязычный сайт, но популярные плагины не устанавливаются, либо работают некорректно. Машинный перевод не устраивает, нужен либо чисто ручной, либо машинный с возможностью редактировать. Плюс весь сайт создавался на Elementor, что тоже создает определенные неудобства. Возможно, кто-то сталкивался с подобной проблемой и уже знает, как она решается. В любом случае, заранее спасибо за ответ. 

Сайт, где выставить sidebar id, WordPress

Добрый день, имею сайт abso-lute.ru, при выставлении в движке своей старой темы, (нужной) дебуг говорит чтоб проблем с сайдбаром. Нужно выставить id сайдбара а вот где его выставить незнаю, помогите в беде.

Поиск из среды WP по базе данных

Допустим в phpMyAdmin будет создана таблица данных из 150 человек(Фамилия, Имя, Отчество, и т.д.). На определенной странцы сайта WordPress будет форма поиска по этой таблице. Как это проще реализовать. Будьте любезны, подскажите. Обшарил пол интернета. Что-то похожее есть, но моими руками не заработало.

Пункт в меню WP

Здравствуйте. Хочу сделать лимит на количество символов в одном пункте в меню или желательно иметь возможность перенести на строку ниже после определённого символа(надо после дефиса). Пишу длинное название пункта, но вместо того, чтоб перенестись на строку ниже, оно просто заполняет строку в длину, т.к. есть место. Заказчик просит этот пункт в 2 строки, а я не понимаю, как это сделать. Пересмотрел десятки форумов и нигде не нашёл именно этой проблемы. Прошу помощи, скрин прилагаю. Первый скрин-как есть, второй-как надо(он из выпадающего меню, там всё автоматом переносится)

Ищу готовое решение для небольшого сайта с отзывами

Всем доброго времени суток. Есть идея сделать тематический (только одна категория товаров) сайт отзывов о товарах и продавцах. Чтобы товары и продавцов мог добавлять только я, а пользователи писали отзывы и ставили оценки. И чтобы в итоге можно было сортировать товары и продавцов по рейтингам и другим критериям (цена для товаров, город для продавцов и т.д.). Ну и чтобы защита от накрутки какая-то была. Есть какое-то более-менее готовое решение? У меня есть небольшой опыт работы с wordpress, интернет-магазины делал и сайты обычные. Что посоветуете?

title и мета в пользовательском посттайпе

Ребята, всем привет! Сделал пользовательский посттайп для портфолио по созданию сайтов. Отдельные посты в этом посттайпе это страницы с кейсом об одном определённом сайте. Они сделаны в рамках админки постами. Им можно прописать тайтлы, дескрипшны, текст и т. п., то есть средствами админки это сдлеать можно. А вот с самим посттайпом, как рубрикой для кейсов сайтов — проблема. Все метаданные формируются каким-то внутренним шаблоном. В БД ничего не нашёл, да и вряд-ли он там что-то есть, так как видно, что title складывается из нескольких частей. Контент получается можно редактировать только через файл шаблона посттайпа в папке темы. Пробовал менять метаданные через фильтры, но ничего не получилось. В YoastSeo тоже ничего не нахожу. А всё это поменять очень надо, так как это страница для портфолио по созданию сайтов, а таких запросов хватает, плюс хочется порядка, чтобы лишних мусорных страниц не образовывалось. Подскажите, может кто сталкивался с подобным, есть ли какое-то толковое решение. Заранее спасибо!

Вот проблемная страница: https://insodatech.by/blog/portfolioweb/

Первое изображение в качестве миниатюры

Добрый день народ!Известно, что open graph выводит картинку, которую при создании записи назначено в качестве миниатюры, но можно его заставить вывести картинку в том случае, если миниатуры не задано, то есть добавляем функцию для og где будет присутствовать кусок кода

//ДЛЯ ИЗОБРАЖЕНИЙ
$first_img = '';
$otimg = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
$first_img = $matches [1][0];
if(empty($first_img)){
$first_img = get_bloginfo('template_directory'). '/wp-content/uploads/2019/11/rianovost.ru_.jpg';
}

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


<div class="poxojie_zapisi">
<?php
$categories = get_the_category($post->ID);
if ($categories) {
$category_ids = array();
foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;
$args=array(
'category__in' => $category_ids,
'post__not_in' => array($post->ID),
'showposts'=>5,
'orderby'=>rand,
'caller_get_posts'=>1);
$my_query = new wp_query($args);
if( $my_query->have_posts() ) {
echo '<h3>Похожие записи:</h3>';
echo '<ul>';
while ($my_query->have_posts()) {
$my_query->the_post();
?>

<li><a>" rel="bookmark" title="<?php the_title(); ?>">
<?php the_post_thumbnail(); ?><br /><?php the_title(); ?></a></li>
<?php
}
echo '</ul>';
}
wp_reset_query();
}
?>
</div>

РазвернутьНо этот код выводит только те изображения, которые заданы в качестве миниатуры во время создания записи.Мой вопрос к программистам :Как первый код от open graph интегрировать в коде вывода похожих записей, что как в open graph выводил первое изображение записи если даже миниатуры не заданы.То же самое касается вывода первой картинки на главной в анонсах. Тут вообще странное дело получается. Если в записи не вставить тег далее, то на главной выводится анонсы с изображением только из тех записей, где задана миниатуры, а записи без заданных миниатюр выводятся голым текстом, но как только вставлю в записи тег далее, то на главной выводятся первые изображения записи, словно тег далее подталкивает изображения на главной.Кто нибудь знает как быть с этим багом?Тема GeneratePressТема поддерживает вывод краткого анонса вне зависимости вставлен ли в записи тег далее, например в других темах если не вставить тег далее, то на главной выводит запись целиком, но у меня вывод анонса не зависит от тега. Но зато вывод изображении почему то зависит от тега далее.

Аккордеон для фильтра товаров

Добрый день.Подскажите, пжлст, как можно решить следующую задачу:Установил фильтр товаров для Woocommerce — Premmerce Product Filter. Очень нужен именно этот плагин. Но есть один нюанс — он не имеет возможности сворачиваться в аккордеон на мобильном виде.Не могу использовать никакой код аккордеона, чтобы в него вставить фильтр шорткодом, так как плагин не имеет шорткода. Он добавляется виджетом в сайдбар.Подозреваю, что единственное решение — в каком-то шаблоне, где выводится сайдбар «Shop» можно прописать какой-то html-код аккордеона. Но не знаю, где это делать и что вписывать.Буду признателен за помощь.Спасибо!

Возможно ли запретить прямой доступ к корневым файлам WP?

Здравствуйте!
Подскажите пожалуйста, существует ли способ без использования плагинов запретить прямой доступ к файлам ядра WP, к примеру:http://localhost/wp-admin/user/menu.php
http://localhost/wp-settings.php
http://localhost/wp-links-opml.php
http://localhost/wp-mail.php
И подобные файлы, которые выдают информацию с ошибками, при прямом доступе. Есть файлы, которые версию движка отображают или к примеру относительные пути.
Пробовал перекрывать таким образом:
RedirectMatch Permanent http://oursense.ru/wp-mail.php /
но в это случае перестает работать отправка писем.
Можно ли как то запретить к подобным файлам прямой доступ или просто переадресовывать на 404?

Anonymous
Отправить
Ответ на: