• Как сделать шорткод для категории для 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' );
    Ответ написан
    Комментировать
  • Какой самый правильный способ добавить CSS только для одной/нескольких страницы в WordPress?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    // ID - id страницы
    if( is_page(ID) ) { 
    // подключение стиля
    }
    Ответ написан
    Комментировать
  • Глобальная переменная $paged Wordpress равна 0. Почему?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    $paged=(get_query_var('paged')) ? get_query_var('paged') : 1;
    $wp_query = new WP_Query(array('posts_per_page'=>3,'paged'=>$paged));
    if ( $wp_query ->have_posts() ) {
    	while ( $wp_query ->have_posts() ) {
    		$wp_query ->the_post();


    Для статической страницы
    $paged = (get_query_var('page')) ? get_query_var('page') : 1;
    Ответ написан
  • Как сделать проверку на автора записи?

    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;
    }
    Ответ написан
  • Как изменить верстку woocommerce меню категорий?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    простейший вариант, добавляете дочернюю тему, там добавляете свой класс MY_Product_Cat_List_Walker - он же модифицированный WC_Product_Cat_List_Walker, в эту же тему закидываете шаблоны которые вам надо изменить и садомириуете их там как хотите, до тех пор пока они есть в теме woocommerce, будет пользовать их, а не те которые под его капотом
    Ответ написан
  • Есть-ли плагин для 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 по произвольному полю?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Что бы отсортировать по клику используйте ajax
    Сортировка по дате из произвольного поля зависит от того, как вы эту дату храните, если в Unix формате или как нибудь так 20150108
    Можно пользовать стандарное APi движка

    $args = array(
        'orderby' => array(
            'meta_value_num',
        ),
        'order' => 'ASC',
        'meta_key' => '%ключ поля%'
    );


    Если храните просто как дату, то вариантов тоже море, идете в гугл, набираете
    "ordering wordpress post by custom field date" и выбираете по вкусу
    Ответ написан
    Комментировать
  • На первой странице пагинации 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 комментария