Ответы пользователя по тегу WordPress
  • Как отобразить в плагине свой шаблон Wordpress по своему урлу?

    banderos120
    @banderos120
    Играю на балалайке
    Если просто нужна одна страница, то проще обойтись вот так.
    Если нужны будут еще параметры из GET массива, то тогда нужно будет работать c add_rewrite_rule(), add_rewrite_tag() и хуками подключения файлов шаблона , например template_include.
    Для примера, вот:
    add_action('init', function(){
        add_rewrite_tag('%tax%', '([^&]+)');
        add_rewrite_tag('%tags_name%', '([^&]+)');
        add_rewrite_rule('^tags/([^/]*)/([^/]*)/?$', 'index.php?tax=$matches[1]&tags_name=$matches[2]', 'top');
    });
    
    add_filter('template_include', function($template){
        
        global $wp_query;
        
        if(!empty($wp_query->query_vars['tags_name']) && !empty($wp_query->query_vars['tax'])){
            
            $wp_query->is_tax = true;
            
            $slug = $wp_query->query_vars['tags_name'];
            
            $tax = $wp_query->query_vars['tax'];
            
            $term = get_term_by('slug', $slug, $tax . '_tags');
            
            if(!$term) return THEME_PATH . DIR_SEP .'404.php';
            
            $wp_query->queried_object = $term;
            
            $wp_query->queried_object_id = $term->term_id;
            
            return THEME_PATH . DIR_SEP .'tags.php';
            
        }
            
        return $template;
        
    });
    Ответ написан
    Комментировать
  • Фильтрация входящих данных?

    banderos120
    @banderos120
    Играю на балалайке
    All in one WP security . Установите этот плагин, он отслеживает изменения файлов на вашем сайте и присылает на почту уведомления. Так вы сможете отследить, если были залиты shell скрипты, или прописан вредоносный код в какие-либо файлы вашего сайта.
    Так же, можете запихнуть в крон эту команду:
    date >> /home/username/shells_find_log.txt; find /home/username/www/ -name "*.php" -type f | xargs grep -l "eval(base64_decode(" >> /home/username/shells_find_log.txt && echo "[END]" >> /home/username/shells_find_log.txt

    , будет искать типовые eval() строки в новых файлах и скидывать их названия в файл shells_find_log.txt.
    Ответ написан
    2 комментария
  • Как в цикле вордпресс выводить одновременно записи разных форматов?

    banderos120
    @banderos120
    Играю на балалайке
    В смысле, вы имеете ввиду вывод разных типов записей ? Потому как "формат" - это таксономия такая. Если типы записи имеете ввиду, то :
    <?php 
    query_posts( array( 'post_type' => array('aside', 'status', 'third_format_you_needed') ) );
    //Тут стандартный цикл
    wp_reset_query(); //Это нужно чтобы вернуть первоначальные глобальные переменные (сбросить цикл)
    ?>
    Ответ написан
    Комментировать
  • Есть ли такой плагин для Wordpress?

    banderos120
    @banderos120
    Играю на балалайке
    Можно через стандартную страницу настроек . Количество подписчиков предоставили выше.
    Ответ написан
    Комментировать
  • Как реализовать такой вывод новостей на Wordpress?

    banderos120
    @banderos120
    Играю на балалайке
    Вариант РАЗ: Делаешь тип записи - НОВОСТИ (news) , далее создаешь шаблон - archive-news.php - это шаблон архива этих типов записей. В нем через стандартный цикл выводишь.
    Вариант ДВА: Делаешь отдельную таксономию news . Создаешь файл вывода терминов этой таксономии - taxonomy-news.php. В админке, в этой таксономии, создаешь термин НОВОСТИ, в который запуливаешь нужные записи, и выводишь их через стандартный цикл.
    Вариант ТРИ: Создаешь шаблон страницы в нем выводишь нужные новости, либо из категории, какой тебе надо, либо создаешь тип записи и его выводишь.
    Ответ написан
    1 комментарий
  • Редактирование полей профиля из фронтенда?

    banderos120
    @banderos120
    Играю на балалайке
    То что там echo в шапке - это роли не играет, так как сам html - это уже вывод. В WP вывод отлавливает известными функциями, значит ошибка в коде, где обрабатывается внесение изменений. В каком файле и как обрабатываете введенные данные ?
    Ответ написан
  • Можно ли получить список виджетов в панели Wordpress?

    banderos120
    @banderos120
    Играю на балалайке
    Так если они сгенерировались пустыми, то, зачем вам отбрасывать, если они и так пустые ? Или я не понял вопроса ? Вообще, чтобы переопределить вывод, вам нужно ввести свою функцию вместо dynamic_sidebar() и переопределить некоторые методы WP_Widget .

    Пример замены dynamic_sidebar() :
    function advanced_dynamic_sidebar($index = 1) {
    	global $wp_registered_sidebars, $wp_registered_widgets;
            $objects = array();
    	if ( is_int($index) ) {
    		$index = "sidebar-$index";
    	} else {
    		$index = sanitize_title($index);
    		foreach ( (array) $wp_registered_sidebars as $key => $value ) {
    			if ( sanitize_title($value['name']) == $index ) {
    				$index = $key;
    				break;
    			}
    		}
    	}
    
    	$sidebars_widgets = wp_get_sidebars_widgets();
    	if ( empty( $sidebars_widgets ) )
    		return false;
    
    	if ( empty($wp_registered_sidebars[$index]) || !array_key_exists($index, $sidebars_widgets) || !is_array($sidebars_widgets[$index]) || empty($sidebars_widgets[$index]) )
    		return false;
    
    	$sidebar = $wp_registered_sidebars[$index];
    
    	$did_one = false;
    	foreach ( (array) $sidebars_widgets[$index] as $id ) {
    
    		if ( !isset($wp_registered_widgets[$id]) ) continue;
    
    		$params = array_merge(
    			array( array_merge( $sidebar, array('widget_id' => $id, 'widget_name' => $wp_registered_widgets[$id]['name']) ) ),
    			(array) $wp_registered_widgets[$id]['params']
    		);
    
    		// Substitute HTML id and class attributes into before_widget
    		$classname_ = '';
    		foreach ( (array) $wp_registered_widgets[$id]['classname'] as $cn ) {
    			if ( is_string($cn) )
    				$classname_ .= '_' . $cn;
    			elseif ( is_object($cn) )
    				$classname_ .= '_' . get_class($cn);
    		}
    		$classname_ = ltrim($classname_, '_');
    		$params[0]['before_widget'] = sprintf($params[0]['before_widget'], $id, $classname_);
    
    		$params = apply_filters( 'dynamic_sidebar_params', $params );
    
    		$callback = $wp_registered_widgets[$id]['callback'];
    
    		do_action( 'dynamic_sidebar', $wp_registered_widgets[$id] );
    
    		if ( is_callable($callback) ) {
    			$did_one = true;
                            $objects[] = call_user_func_array($callback, $params);
    		}
    	}
    	return $objects;
    }


    Метод, который нужно переопределить в WP_Widget :
    function display_callback( $args, $widget_args = 1 ) {
    		if ( is_numeric($widget_args) )
    			$widget_args = array( 'number' => $widget_args );
    
    		$widget_args = wp_parse_args( $widget_args, array( 'number' => -1 ) );
    		$this->_set( $widget_args['number'] );
    		$instance = $this->get_settings();
                    
    		if ( array_key_exists( $this->number, $instance ) ) {
    			$instance = $instance[$this->number];
    			// filters the widget's settings, return false to stop displaying the widget
    			$instance = apply_filters('widget_display_callback', $instance, $this, $args);
    			if ( false !== $instance )                            
                                return $this->widget($args, $instance);
    		}
    	}


    И, соответственно, вам надо отлавливать вывод выджета, который происходит в методе widget().
    Может есть и проще способ, но я его не знаю )
    Ответ написан
  • Каким способом расширяют dashboard wordpress?

    banderos120
    @banderos120
    Играю на балалайке
    Вообще вот add_menu_page() и add_submenu_page() .
    Ответ написан
    Комментировать