Ответы пользователя по тегу WordPress
  • Как получить id рубрики текущей записи?

    alone_lion1987
    @alone_lion1987
    Веб разработчик
    $cat = get_the_category($post->ID);
    
    // ID категории
    $cat->cat_ID
    
    // Название категории
    $cat->cat_name 
    
    // Альтернативное название категории
    $cat->category_nicename
    
    // Описание категории (задается на странице редактирования категории)
    $cat->category_description
    
    // ID родительской категории
    $cat->category_parent 
    
    // Количество записей в категории
    $cat->category_count
    Ответ написан
  • Как в wordpress в записях сделать вывод постов из категорий этой записи?

    alone_lion1987
    @alone_lion1987
    Веб разработчик
    Вывод плиткой. Примерно так:

    1 2
    3 4

    Взял код со своего одного старого проекта. Вроде рабочий.

    В шаблоне single.php, после контента поста:

    <?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' => 4, // кол-во постов
            'caller_get_posts' => 1,
            'orderby' => 'rand' // в случайном порядке
        );
    
        $my_query = new wp_query($args);
        if ($my_query->have_posts()) {
            echo '<div class="more">';
            $cssMap = array(0 => "first", 1 => "last");
            $counter = 0;
            while ($my_query->have_posts()) {
                $my_query->the_post(); ?>
                <?php $class = $cssMap[$counter++ % 2]; ?>
                <div class="more-post left <?php print $class; ?>">
                    <?php the_excerpt(''); // анонс поста ?>
                </div>
                <?php if ($class == $cssMap[1]) { ?>
                    <div class="clearfix"></div>
                <?php
                }
            }
            echo '</div>';
        }
        wp_reset_query();
    }


    ну понятно, clearfix класс после 2 блоков очищает обтекание, дабы верстка не поплыла, а класс left задает обтекание. Ну блокам еще ширину можно задать 50%. Вроде все
    Ответ написан
  • Как растянуть видео на всю ширину в Wordpress?

    alone_lion1987
    @alone_lion1987
    Веб разработчик
    Есть идея, как это сделать еще к тому же и адаптивно.
    Если вставляешь через визуальный редактор, то потом перейти в режим «html» (или сразу оттуда). Смысл в том, что надо iframe засунуть в див, ему пару стилей дать, самому iframe тоже.

    НТМL:

    <div class="embed-responsive embed-responsive-16by9">
       <iframe class="embed-responsive-item" src="..." frameborder="0" allowfullscreen></iframe>
    </div>


    CSS:

    .embed-responsive-16by9 {
        padding-bottom: 56.25% !important;
    }
    
    .embed-responsive {
        position: relative;
        display: block;
        height: 0;
        padding: 0;
        overflow: hidden;
    }
    
    .embed-responsive .embed-responsive-item, .embed-responsive iframe {
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        width: 100%;
        height: 100%;
        border: 0;
    }


    Ну понятно, в src=... вставляешь ссылку от ютуба

    https://jsfiddle.net/egsvu8bz/
    Ответ написан
  • Изменить id страницы на текст?

    alone_lion1987
    @alone_lion1987
    Веб разработчик
    Не совсем понял вопрос, но на уровне интуиции отвечу. Заходим в админ панель:

    Настройки » Постоянные ссылки » Выбираем к примеру Название записи

    a3d3d765bce2408bb03b256df9601f14.png

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

    alone_lion1987
    @alone_lion1987
    Веб разработчик
    Не совсем понятно, что у вас не получилось. Попробуйте такой код вставить в functions.php:
    add_action( 'comment_post', 'ins_message_function', 10, 2 );
    function ins_message_function( $comment_ID, $comment_approved ) {
    	if( 1 === $comment_approved ){
    	global $wpdb;
      $wpdb->update( 'wp_comments',
    	array( 'comment_custom' => 'то что хотим обновить' ),
    	array( 'comment_ID' => $comment_ID ),    // там где текущий коммент
    	array( '%s' ), // формат, %s — строка, того что хотим обновить
    	array( '%d' ) // формат, %d — число id текущего коммента
         );
       }
    }
    Ответ написан
  • Натяжка на WP - как реализовать вывод страницы на странице?

    alone_lion1987
    @alone_lion1987
    Веб разработчик
    Так как это по сути модальные окошки на главной странице можно поступить следующим образом, приведу часть кода с реального проекта, может поможет:

    В стандартном, а точнее настраиваемом ( get_posts( ... ) ) Loop WordPress выводим что хотим, ну к примеру пускай постами (пускай они обязательно относятся к одной какой то интересующей категории, назовем ее как нибудь, исходя из твоего контекста, я бы назвал рубрику Главная):

    <?php
    $posts = get_posts(array(
       'numberposts' => -1,
       'offset' => 0,
       'category' => 'номер категории твоей интересующей — id, число, подсмотреть в админке можно',
       'orderby' => 'post_date',
       'order' => 'ASC',
       'post_type' => 'post',
       'post_status' => 'publish'
    ));
    foreach($posts as $post){ 
       setup_postdata($post);  
       // формат вывода
    	$id = str_replace('/', '', str_replace('http://' . $_SERVER['SERVER_NAME'], '', get_the_permalink()));
            // возьмем к примеру, что h2, а в нем a ссылка — это тот элемент, по клику на который вылазит модальное окно
            <h2><a href="#" data-toggle="modal" data-target="#<?= $id ?>"><? the_title() ?></a></h2>
            <div class="modal fade" id="<?= $id ?>" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
       <div class="modal-dialog">
          <div class="modal-content">
             <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
                <div class="modal-body">
                   <?the_content()?>
                 </div>
              </div>
          </div>
        </div>
    }  
    wp_reset_postdata();
    if(isset($_GET['post_id']) && !empty($_GET['post_id'])){
       $post_id = trim(strip_tags($_GET['post_id']));
           ?>
              <script>
                 $(function(){
                      $('#<?=$post_id?>').modal();
                  });
               </script>
             <?
     }


    В том месте, где формат вывода, нужно соответственно (к примеру) подключить модальные окна от бутстрап ( но в твоем шаблоне там отдельная разметка и js, нужно уже по ситуации смотреть, чтобы все заработало, но суть реализации от этого не страдает )

    В файле functions.php:

    function my_single_template($single)
    {
        global $wp_query, $post;
        foreach ((array)get_the_category() as $cat) {
            if (file_exists(get_template_directory() . '/single-' . $cat->slug . '.php')) {
                return get_template_directory() . '/single-' . $cat->slug . '.php';
            } elseif (file_exists('/single-' . $cat->term_id . '.php')) {
                return get_template_directory() . '/single-' . $cat->term_id . '.php';
            }
        }
    }
    
    // подключим еще jquery, если в твоей теме он не используется, ну можно как то так, так как он нужен модальных окон бутстрап
    function my_scripts_method()
    {
        wp_deregister_script('jquery');
        wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js');
        wp_enqueue_script('jquery');
    }
    add_action('wp_enqueue_scripts', 'my_scripts_method');


    Потом идем и создаем файл в теме single-{слаг-категории}.php, отвечающий за показ отдельного поста, относящийся к твоей интересующей категории, в нем надо задать будет:

    <?php
    header('Location: http://' . $_SERVER["SERVER_NAME"] . '/?post_id=' . str_replace('/', '', str_replace('http://' . $_SERVER['SERVER_NAME'], '', get_the_permalink($post->ID))));
    exit;


    Это надо чтобы не переходило на url такого поста, а открывало модальное окно определенное на главной.

    Проблематика была схожая в одном из моих проектов, решение рабочее. Как я уже сказал, ранее

    В том месте, где формат вывода, нужно соответственно (к примеру) подключить модальные окна от бутстрап ( но в твоем шаблоне там отдельная разметка и js, нужно уже по ситуации смотреть, чтобы все заработало, но суть реализации от этого не страдает )


    Нужно смотреть и адаптировать под себя:
    • Разметку модальных окон в твоей теме
    • В том месте, где окно вызывается в бутстрапе через .modal( ... ) надо заменить на вызов показа модального окна соответственно в твоих Js modal, а там уже смотри сам как работает вызов


    P.S: Шаблон прикольный, кстати)
    Ответ написан
  • Прикрутка лендинга к блогу?

    alone_lion1987
    @alone_lion1987
    Веб разработчик
    Ты можешь сделать следующим образом:

    - Определить в теме на wordpress, там где предполагается разместить блог, 2 файла:
    - - header-landing.php
    - - footer-landing.php
    Соответственно в них, в шапке определяешь стили, head и тд. в футере скрипты. А среднюю часть запихиваешь в index.php в папке темы, причем, я подозреваю, что именно лэндинг у тебя будет на главной (а за это будет как раз отвечать вот такой index.php), а в меню где то будет пункт, к примеру с произвольной ссылкой "Блог", вести она будет по адресу, к примеру site.ru/category/posts (ну а для этого создаешь рубрику posts из коробки в wp и пуляешь туда свои посты)

    index.php:

    // в шапку выносишь все то, что ты хочешь видеть в шапке, то есть, то что постоянно на каждой странице тут
    <?php get_header("landing"); ?>
    
    // здесь html твой, средней части лэндинга
    
    // тоже самое футер, срипты итд
    <?php get_footer("landing"); ?>


    Потом делаешь динамическое меню (свое), прикручиваешь его в шапку, в любом месте (но до этого его на зарегистрировать в functions.php [menu_name]), выводишь функцией в любом, к примеру

    <?php
    $args = [
      'theme_location' => 'menu_name'
    ];
     wp_nav_menu($args);?>


    Потом в админке уже можешь добавить пункт в меню "Блог", дать ему ссылку на рубрику постов и все. На главной лэндинг, по ссылке - блог. Но вообще все индуивидуально, смотря какая тема там у тебя, может еще надо покопаться, посмотреть настройки в админке, но суть изначально вот такая. Как я себе это вижу

    ---

    у меня лендинг -одна страница (index.htm) на которой ссылка на блог site.ru/blog, лендинг соответственно имеет свои папки css и javascript и images. Вот как все это распределить в теме и настроить так, чтобы основная страница выводилась -лендинг, а по ссылке блог выводился уже блог вордпресс. Лендинг можно не делить на хэдер и футер и т.д. он статичен- у него одна страница. Как грамотно все это разместить в теме и настроить там function.php и т.д. и в настройках админки.


    А в таком случае не проще сделать так: на сервере в корне лендинг -одна страница (index.htm) с папки css и javascript и images. Создать еще одну директорию, blog, туда устанавливаем wp с любой темой. И таким образом будет на главной лэндинг, а при переходе в /blog/ будет открываться и обрабатывать запросы wp. (Может быть слегка придется подправить в /blog/ .htaccess или VirtualHost , чтобы точка входа в блог была /blog/index.php, ну или root на nginx ). Ну и прописывать в принципе ничего не надо будет никуда больше, в functions.php и тд. Если что то катомизировать в теме, уже идем в /blog/ и там копаемся.
    Ответ написан
  • Wordpress. Подключение защищено не полностью. Как решить?

    alone_lion1987
    @alone_lion1987
    Веб разработчик
    У вас так происходит, потому что вывод ссылок в html идет по протоколу http:// (просмотрите исходный html-код и поиском пройдитесь по http://, все ссылки там у вас загружаются по http, а нужно по https), поэтому получается такая ситуация. Нужно чтобы система генерировала ссылки по https. Это касается всего, — ссылки для подключения css, js. Ссылки, в контенте, которые уже берутся из бд.

    В этом случае, в шаблоне вашего сайта, если прописаны абсолютные url, советую заменить http на https. Если используете по всюду функции вывода из бд, тогда надо менять в бд. Но лучше попробуйте такой код (если у вас сайт на wordpress). Еще есть встроенная функция, определяющая, какой протокол использует веб-сервер, для отдачи страниц, — is_ssl( ).

    В файл functions.php вставьте:

    add_filter('the_content', 'replace_url_to_https', 30);
    function replace_url_to_https($text)
    {
        $text = preg_replace('~http(://(?:www.)?' . preg_quote($_SERVER['HTTP_HOST']) . ')~', 'https\1', $text);
        return $text;
    }

    Вроде это должно помочь.

    Еще можно запросами к бд попробовать, тогда и код выше не понадобится:

    UPDATE wp_options SET option_value = replace(option_value, 'http://site.ru', 'https://site.ru') WHERE option_name = 'home' OR option_name = 'siteurl';
    
    UPDATE wp_posts SET guid = replace(guid, 'http://site.ru', 'https://site.ru');
    
    UPDATE wp_posts SET post_content = replace(post_content, 'http://site.ru', 'https://site.ru');


    Тут site.ru — ваш домен подставляете. Все абсолютные пути в базе станут с https

    А везде, где ссылки выводятся не через бд, а напрямую хардкорно прописаны где либо http, замените на https://
    Ответ написан
  • Актуальные материалы для изучения по WordPress?

    alone_lion1987
    @alone_lion1987
    Веб разработчик
    wp-kama.ru
    очень много полезной инфы с примерами.

    Еще книга. WordPress для профессионалов, разработка и дизайн сайтов. Б. Уильямс, Д. Дэмстра, Х. Стэрн. Ищется в гугле

    Кодекс. На оф. сайте

    Код. Внутри код вп, комментарии к функциями, классам, методам. Тоже можно поразбираться
    Ответ написан
  • Когда использую поиск в WP то везде выводит результат, а если нахожусь на single.php то ничего не происходит, почему?

    alone_lion1987
    @alone_lion1987
    Веб разработчик
    Может быть у вас что-то не настроено или настроено неверно.
    Сперва вам нужно вынести форму поиска в отдельный шаблон, этот шаблон в теме называтся searchform.php , в нем примерно такой код, в большинстве случаев он стандартный:
    <form id="searchform" class="navbar-search" method="get" action="<?php echo home_url( '/' );?>">
    <input type="text" class="search-query" placeholder="Поиск" name="s" id="s" value = "<?php echo get_search_query();?>">
    </form>

    Затем нужно вызывать данную форму в шаблоне, который подключается ко всем страницам, например это шаблон шапки, header.php, ниже функция выведет код формы из файла searchform.php , вам нужно будет просто эту функцию вызвать в том месте в котором вы хотите:
    <?php get_search_form(); ?>
    После этого уже вам нужно создать файл search.php, в папке темы и реализовать примерно такую логику:
    <? if( have_posts() ):						   
           while(have_posts()): the_post(); ?>
            // вывод...
          <? endwhile; ?>
    <? else: ?>
    <p> По запросу &laquo;<? the_search_query(); ?>&raquo; ничего не найдено</p>
    <? endif; ?>
    Ответ написан