• Где хранятся в базе настройки rewrite_rules?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    https://wordpress.org/plugins/rewrite-rules-inspec... вот так можно проверить правила

    function do_rewrite(){
        // Правило перезаписи
      $ref_p="названиестраницы";
    //p_id = 88 - id страницы названиестраницы
        add_rewrite_rule( '^' . $ref_p . '/([^/]*)/([^/]*)/?', 'index.php?p=88&param1=$matches[1]&param2=$matches[2]', 'top' );
    add_filter( 'query_vars', function( $vars ){
            $vars[] = 'param1';
            $vars[] = 'param2';
            return $vars;
        } );
    }
    add_action('init', 'do_rewrite');`


    Затем обновить правила перезаписи
    Ответ написан
    1 комментарий
  • Как можно понять данный кусочек кода?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Ну объяснял же уже.
    Проверяет есть ли в ответе параметр redirect_to, если есть то проверяет находится ли он в списке допустимых и возвращает его, если нет, то возвращает значение установленное в $attributes['redirect']

    Подробнее ответил на ваш вопрос заданный на сайте. wp-panda.com/build-a-custom-wordpress-user-flow-pa...
    Ответ написан
    1 комментарий
  • Как сделать шорткод для категории для Wordpress?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    [category slug="slug категории" ]

    <?php 
    function my_shortcode( $atts ) {
    
    	extract( shortcode_atts(
    		array(
    			'slug' => '',
    		), $atts )
    	);
    $out ='';
    $query = new WP_Query('category_name=' . $slug);
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            $out .= '<div><h3 >' . get_the_title() . '</h3>'  . get_the_content() .  '</div>';
        }
    } else {
      $out .= 'Записей для вывода шорткодом нет';
    }
    wp_reset_query();
    
    return $out;
    
    }
    add_shortcode( 'category ', 'my_shortcode' );
    Ответ написан
    Комментировать
  • Как сделать проверку на автора записи?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    is_author('1') - проверяет где мы находимся, и срабатывает только для архивов автора, в данном случае с ID = 1
    соответственно if (is_single() && is_author('1') никогда не вернет true

    вне цикла делать так
    $post_author = ( is_singular() ) ? get_post()->post_author : 0;


    Получили ID дальше проверяйте и выводите или не выводите, что надо
    Ответ написан
    Комментировать
  • Есть ли способ загрузить JS скрипт для плагина в HEAD на WP без правки functions?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Jquery Ui грузится в футер по умолчанию, для переподключения надо переопределить это дело.
    // в админке осталяем как было
        if( ! is_admin() ) { 
    //переопределяем загрузку ядра
        wp_deregister_script( 'jquery-ui-core' );
        wp_enqueue_script( 'jquery-ui-core', site_url(  '/wp-includes/js/jquery/ui/core.min.js' ), array('jquery') );
    //переопределяем загрузку api виджетов
        wp_deregister_script( 'jquery-ui-widget' );
        wp_enqueue_script( 'jquery-ui-widget', site_url(  '/wp-includes/js/jquery/ui/widget.min.js' ), array('jquery') );
    // табы
        wp_deregister_script( 'jquery-ui-tabs' );
        wp_enqueue_script( 'jquery-ui-tabs', site_url(  '/wp-includes/js/jquery/ui/tabs.min.js' ), array('jquery') );
    //диалог
        wp_deregister_script( 'jquery-ui-dialog' );
        wp_enqueue_script( 'jquery-ui-dialog', site_url(  '/wp-includes/js/jquery/ui/dialog.min.js' ), array('jquery') );
    
    }
    Ответ написан
    4 комментария
  • Как оптимизировать картинку под определенные размеры в самом темплейте?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    https://github.com/bfintal/bfi_thumb
    Вторая версия мне нравится сильно меньше
    Ответ написан
    Комментировать
  • Как в Woocommerce добавить произвольное поле в вариативный товар?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Чего же вы все уцепились так в эти плагины для полей?
    Использовать ACF и его аналоги это плохая практика, это очень плохая практика, это очень очень плохая практика.
    И у WordPress и у WooCommerce есть соответствующее API

    Для вариативного товара маленький простой код.
    add_action( 'woocommerce_product_after_variable_attributes', 'cr_variable_fields', 10, 3 );
    add_action( 'woocommerce_product_after_variable_attributes_js', 'cr_variable_fields_js' );
    add_action( 'woocommerce_process_product_meta_variable', 'save_cr_variable_fields', 10, 1 );
    
    /**
     * Создает новое поле
    */
    function cr_variable_fields( $loop, $variation_data, $variation ) {
    ?>
    	<tr>
    		<td>
    			<?php
    			woocommerce_wp_text_input( 
    				array( 
    					'id'          => '_text_field['.$loop.']', 
    					'label'       => __( 'Мое текстовое поле', 'woocommerce' ), 
    					'placeholder' => __( 'Подсказка', 'woocommerce' ), 
    					'desc_tip'    => 'true',
    					'description' => __( 'Введите ваше значение.', 'woocommerce' ),
    					'value'       => get_post_meta( $variation->ID, '_text_field', true )
    				)
    			);
    			?>
    		</td>
    	</tr>
    	
    <?php
    }
    
    /**
     * Создает поле нового варианта
    */
    function cr_variable_fields_js() {
    ?>
    	<tr>
    		<td>
    			<?php
    			woocommerce_wp_text_input( 
    				array( 
    					'id'          => '_text_field[ + loop + ]', 
    					'label'       => __( 'Мое текстовое поле', 'woocommerce' ),  
    					'placeholder' => __( 'Подсказка', 'woocommerce' ),
    					'desc_tip'    => 'true',
    					'description' => __( 'Введите ваше значение.', 'woocommerce' ),
    					'value'       => ''
    				)
    			);
    			?>
    		</td>
    	</tr>
    <?php
    }
    
    /**
     * Сохраняет поле
    */
    function save_cr_variable_fields( $post_id ) {
    	if (isset( $_POST['variable_sku'] ) ) :
    		$variable_sku          = $_POST['variable_sku'];
    		$variable_post_id      = $_POST['variable_post_id'];
    		
    		$_text_field = $_POST['_text_field'];
    		for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
    			$variation_id = (int) $variable_post_id[$i];
    			if ( isset( $_text_field[$i] ) ) {
    				update_post_meta( $variation_id, '_text_field', stripslashes( $_text_field[$i] ) );
    			}
    		endfor;
    
    	endif;
    }
    Ответ написан
  • Есть-ли плагин для wordpress, позволяющий отобразить записи рубрики в таком виде?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Такого плагина нет, делается элементарным добавлением счетчика в цикл, и в зависимости от итерации подстановкой нужной разметки
    Ответ написан
    Комментировать
  • Woocommerce как настроить вид товаров?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    woocommerce практически все выводит через Экшены и фильтры
    в данном случае вам надо вешаться на
    'woocommerce_shop_loop_item_title'
    из стандартного вывода там отличается только наличие описания
    выводить так
    add_action('woocommerce_shop_loop_item_title' ,'woocommerce_template_single_excerpt',20);

    для радиобаттонов надо поменять шаблон woocommerce/templates/single-product/add-to-cart/variable.php
    там определен селект
    Ответ написан
    Комментировать
  • Иконка в заголовке поста wordpress?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Без всяких проверок, ваша проблема решается тупо в css.
    Грамотно построенный вывод записи в цикле выглядит так

    <article id="post-<?php echo $post->ID; ?>" <?php post_class(); ?>>
    // содержимое записи
    </article>


    Один из классов возвращаемых функцией post_class() выглядит так %taxonomy%-%term%, для категории со слагом foo, класс будет выглядеть так - category-foo

    В css вставляем что типа такого
    article.category-foo:before {
        width: 30px;
        height: 30px;
        content: ' ';
        background-image: url('%img-url%');
        display: block;
        position: absolute;
        top: -25px;
        left: -25px;
    }

    можно комбинировать с body_class
    Ответ написан
    Комментировать
  • Русские имена файлов на web сервере?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Имена файлов на кирилице - это плохо, даже если на конкретном все чудно пашет есть не кислая вероятность, что при переносе они грохнуться.

    Подключите любую транслитерацию и подвесьте на sanitize_file_name
    add_filter('sanitize_file_name', '%ваша функция транслитерации%');


    после этого файл при загрузке будет ей обрабатываться и менять имя на имя на латинице
    Ответ написан
    Комментировать
  • На первой странице пагинации WordPress 9 записей на остальных 8 при AJAX подгурзки?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Решение не работает, потому, что вы не понимаете того, что вы делаете
    1. в js скрипте не видно, что же за true_posts вы передаете в переменной query, но судя по обработчику вы там передаете основные параметры запроса в виде сериализованного массива, это бредовое решение. передавать достаточно номер страницы пагинации. (На работу или не работу пагинации это не влияет, но это не верно, и это охрененных размеров дыра, через которую получить из вашей базы можно все что хочешь). Запрос надо формировать в обработчике целиком.
    2. то что вам не подходит, подходит если делать так

    $args = unserialize(stripslashes($_POST['query']));
        $args['paged'] = $_POST['page'] + 1; // следующая страница
        $args['post_status'] = 'publish';
           $first_page_post_count = 9;
            $empty_pages_post_count = 8;
    
            if ($args['paged']  > 1) {
                $posts_per_page =  $empty_pages_post_count;
                if ($args['paged']  == 2) {
                    $offset = $first_page_post_count;
                } else {
                    $offset = $first_page_post_count + ( $empty_pages_post_count * ($args['paged']  - 2));
                }
            } else {
                $offset = 0;
                $posts_per_page = $first_page_post_count;
            }
            $args['posts_per_page'] =>$posts_per_page;
            $args['offset'] => $offset;
    $q = new WP_Query($args);
    Ответ написан
    5 комментариев
  • Как можно добавить добавить какой-либо метод шифрования?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Движок хранит пароль в MD5,
    При создании пароля он его солит и то ли 5 то ли 8 раз прогоняет через MD5.
    Сейчас народ все больше и больше возмущается на тему того, что MD5 уже не Торт. И в какой то мере таки да, и вычислительные мощности уже такие, что Deep Blue смущенно краснеет, и база хэшей тоже не кислая.
    Но если юзерь задает пароль типа даты рождения, или имени первой подруги которой присунул или подобные перлы, то тут бессилен любой метод шифрования.
    Запрещайте использование небезопасных паролей, добавляйте защиту от брутофорса. И этого хватит за глаза, чай не сайт Федеральной резервной системы строите.

    И да, изменить сам алгоритм шифрования малой кровью можно, api это позволяет, но из за особенностей движка это останется тот же MD5 и те же 128 бит

    Можно изменить и большой кровью, но вы это точно не осилите, раз вам было тяжело разобраться с достаточно подробно расписанной регистрацией.
    Ответ написан
    Комментировать
  • Насколько этот код безопасен?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Что, именно вас смущает?
    так то
    Достаточно стремный вариант регистрации, все что делает добавляет шорткод с формой реги и напрямую вставляет юзеря с минимальной валидацией, кроме того есть несколько мелких ошибок.
    Стандартная регистрация остается доступной, из апи только insert_user.

    Если почитаете оригинал, то там в комментах на критику автор отвечает, не нравится сделайте лучше.

    Чисто любопытства для, а чем вас не устраивает тот вариант который я давал раньше?
    Ответ написан
    5 комментариев
  • Как переопределить функцию основной темы WordPress (тема StoreFront)?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Если в ней нет фильтров, или проверки на наличие другой функции с тем же именем, то никак
    Ответ написан
    Комментировать
  • Как исправить ошибку при активации плагина?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    1.
    register_activation_hook(__FILE__, 'activate_options');

    соответственно ищет и не находит - предупреждение один
    2.
    add_options_page('RDolls Category Adder', 'RDolls Category Setting', 8, __FILE__, 'plugin_setting_page');

    Использование уровней считается устаревшим еще со времен царя гороха. Надо пользовать возможности, вот так
    add_options_page('RDolls Category Adder', 'RDolls Category Setting', 'manage_options', __FILE__, 'plugin_setting_page');

    3. Если не пользуете никаких отладчиков смотрите хотя бы в логи сервера, будет сильно проще жить
    Ответ написан
    Комментировать
  • Как создаются полностью изменяемые темы?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Все настройки тем построены, как правило, на 4-х функциях
    codex.wordpress.org/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2...
    codex.wordpress.org/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2...
    codex.wordpress.org/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2...
    codex.wordpress.org/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2...

    Используя их можно сделать все что угодно

    В Движок встроено API для кастомизации https://codex.wordpress.org/Theme_Customization_API
    но его, сильно не пользуют, в основном для десятка - другого настроек. Обычно пользуют всякие самописные решения, в настоящее время самым популярным является Redux https://reduxframework.com/
    Ответ написан
    2 комментария
  • Библиотека для оптимизации изображений?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    psliwa - хорошая, пользую достаточно часто.
    tinypng - нормальный вариант для блогов, с не сильно большим количеством фотографий, для больших фоток тоже норма но уже надо костыль, надо получать много Api ключей, и ставить счетчик, после каждых 500 картинок в месяц подставлять другой ключ
    kraken - не супер вариант, но там в платном варианте идет уже счет за вес картинок, а не количество 9$ за 2 гига не много, но результат у него не супер, часто для нормальной минимизации требуется по 2 - 3 прогона картинки
    Ответ написан
    Комментировать
  • Как в WordPress вывести изображение?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Не ужели это так сложно?
    Идем в гугл, забиваем wp_get_attachment_image_src
    переходим по первой же ссылке в кодекс
    жмем в меню на Examples ->Default Usage
    получаем
    <?php 
    $attachment_id = 8; // attachment ID
    
    $image_attributes = wp_get_attachment_image_src( $attachment_id ); // returns an array
    if( $image_attributes ) {
    ?> 
    <img src="<?php echo $image_attributes[0]; ?>" width="<?php echo $image_attributes[1]; ?>" height="<?php echo $image_attributes[2]; ?>">
    <?php } ?>


    поиск занимает меньше времени, чем написать вопрос
    Ответ написан
    1 комментарий