Ваш путь: Главная » WordPress без плагинов » текущая страница

возможно заказать разработку или сопровождение, услуги вашего сайта/блога


обновлено: 2024-02-13 в теме: WordPress без плагинов
Запросто с WordPress создание и продвижение сайтов ATs media

Добавим в сайдбар (в админку) свой виджет вывода постов – тонко настраиваемый

Давненько я не писал статей по разбору, созданию и настройке шаблонов для сайта на Вордпресс: нынче решил исправить это дело.

Решил стартовать тему виджетов: из которой будем узнавать что же такое и как устроены на сайте виджеты. Тем, которым сия тема интересна, приступим:

В рамках сегодняшней статьи ближе рассмотрим вопрос о том, как добавить собственный виджет в свою тему (шаблон)? причём, не используя плагинов… как всё это настроить…

Например, возьмём и добавим в свой шаблон виджет опубликованных на сайте постов -статей: виджет очень тонко настраивается из админки… Ну, ладно, обо всём ниже – занавес открывается:


 

 

Итак, узнаем, как

 

 

 

добавить в шаблон виджет вывода постов

 

 

 

 

Для начала познакомимся визуально, так сказать, с тем что у нас нынче получится:

 

В результате работ – итогом, у нас в админпанели, в разделе “Виджеты” появится ещё один с именем “Статьи с миниатюрой”…

 

 

Как видите, виджет для вывода опубликованных постов (ну, скажем, где-нить в сайдбаре… хотя возможно вывести где угодно, но об этом дальше) имеет массу полезных настроек, а это значит, что не придётся лазить на сервер и править файлы – то бишь тратить массу полезного времени!

 

 

Здесь же всё просто: открыл настройки виджета, внёс требуемые правки и – готово! Пользуйся на здоровье…

 

 

 

добавить в шаблон виджет вывода постов

 

 

 

Варианты вывода/отображения статей от Рандомного до… То есть как и каким порядком будет осуществляться Вордпресс выборка постов сайта/блога

 

 

 

виджет вывода постов сайта

 

 

 

Думаю, особо подробно описывать опции виджета нет смысла, – я максимально вывел пояснения в настройках (в коде – файлах)…

 

 

Что жж, давайте реализуем поставленную в старте статьи задачу…

 

 

 

Реализация описанной процедуры добавления своего функционально настраиваемого сайдбара (т.е виджета) возможна практически в любом шаблоне!

 

 

 

 

привязываем php  обработку виджета к своему шаблону

 

 

 

Подготовимся:

 

1 – как понимаете, нам потребуется файл шаблона functions.php

 

2 – создадим в ядре шаблона папку lib и…

 

3 – в папке lib создадим ещё одну папку с именем widgets и css (css на будущее, тем читателям, которым интересна тема – будет ещё много полезных примочек)

 

4 – в папке widgets создадим php файл с именем posts.php.

 

 

 

После этих манипул, нам останется только наполнить эти созданные папки и файлы.

 

 

Работаем по шагам:

 

а) добавим одну запись в файл functions.php и по одному файлу во вновь созданные папки.

 

 

 

Важно! я всегда советую не захламлять functions.php, а создать для каких-то объёмных функций отдельные файлы: как это делается

 

Или создайте создайте свой собственный плагин — по типу отдельного функционального файла для сайта, вынесенного за рамки ядра шаблона (реализация достаточно проста).

 

Возможно, кому-то будет интересно прочесть текст-урок: выводим свои соответствующие теги (метки) для конкретной рубрики (2 варианта) – Получится так: все имеющиеся на сайте теги — всё их общее количество выводиться не будут — а будут отображены только те метки (теги), которые относятся к данной конкретной категории, на которой находится посетитель – т.е. в любой другой рубрике, будут выводиться только соответствующие ЕЙ метки!.

 

 

 

…продолжаем: чтобы запустить полноценную отработку собственного виджета вывода анонсов постов (или статей, кому как угодно) потребуется поработать и ещё, об этом чуть ниже…

 

 

Открываем файл функций functions.php, и дописываем в его недра (желательно где-то ближе к старту кодировок – чтобы вам не путаться!) следующие строки:

 

 

require_once TEMPLATEPATH . '/lib/Themater.php';      // привязка фала Themater.php

$theme->load();                                       // привязка кастомных виджетов

 

 

Переменную $theme – возможно заменить на свою уникальную! (но тогда не забыть поменять все одноимённые переменные в создаваемых файлах)…

 

 

Готово!..

 

 

 

б) далее пропишем необходимые функции в созданный нами файл Themater.php

 

 

Просто копируйте из спойлера весь данный код и помещайте в свой созданный на предыдущем шаге файл.

 

 

 

 

Заметка! не пугайтесь, что расположенный ниже код такой объёмный, как и говорил выше – в следующих статьях будем усовершенствовать настройки в адмике, а потому в файле собранны функции на будующее – для следующих статей: в следующих инструкциях станем добавлять и другие виджеты, и прочее…

А кому неинтересно, дам вариант укороченного кода.

 

 

 

 

код для файла Themater.php

<?php
class Themater
{
//
function Themater($set_theme_name = false)
{
if($set_theme_name) {
$this->theme_name = $set_theme_name;
} else {
$theme_data = wp_get_theme();
$this->theme_name = $theme_data->get( 'Name' );
}
$this->options['theme_options_field'] = str_replace(' ', '_', strtolower( trim($this->theme_name) ) ) . '_theme_options';

$get_theme_options = get_option($this->options['theme_options_field']);
if($get_theme_options) {
$this->options['theme_options'] = $get_theme_options;
$this->options['theme_options_saved'] = 'saved';
}

$this->_definitions();
$this->_default_options();
}
/**
* Initial Functions
*/
function _definitions()
{
// Define THEMATER_DIR
if(!defined('THEMATER_DIR')) {
define('THEMATER_DIR', get_template_directory() . '/lib');
}

if(!defined('THEMATER_URL')) {
define('THEMATER_URL', get_template_directory_uri() . '/lib');
}
// Define THEMATER_INCLUDES_DIR
if(!defined('THEMATER_INCLUDES_DIR')) {
define('THEMATER_INCLUDES_DIR', get_template_directory() . '/includes');
}

if(!defined('THEMATER_INCLUDES_URL')) {
define('THEMATER_INCLUDES_URL', get_template_directory_uri() . '/includes');
}

// Define THEMATER_ADMIN_DIR
if(!defined('THEMATER_ADMIN_DIR')) {
define('THEMATER_ADMIN_DIR', THEMATER_DIR);
}

if(!defined('THEMATER_ADMIN_URL')) {
define('THEMATER_ADMIN_URL', THEMATER_URL);
}
}

function _default_options()
{
// Load Default Options
require_once (THEMATER_DIR . '/default-options.php');

$this->options['translation'] = $translation;
$this->options['general'] = $general;
$this->options['includes'] = array();
$this->options['plugins_options'] = array();
$this->options['widgets'] = $widgets;
$this->options['widgets_options'] = array();
$this->options['menus'] = $menus;
// Load Default Admin Options
if( !isset($this->options['theme_options_saved']) || $this->is_admin_user() ) {
/************************************************************/
}
}
/**
* Theme Functions
*/
function option($name)
{
echo $this->get_option($name);
}

function get_option($name)
{
$return_option = '';
if(isset($this->options['theme_options'][$name])) {
if(is_array($this->options['theme_options'][$name])) {
$return_option = $this->options['theme_options'][$name];
} else {
$return_option = stripslashes($this->options['theme_options'][$name]);
}
}
return $return_option;
}

function display($name, $array = false)
{
if(!$array) {
$option_enabled = strlen($this->get_option($name)) > 0 ? true : false;
return $option_enabled;
} else {
$get_option = is_array($array) ? $array : $this->get_option($name);
if(is_array($get_option)) {
$option_enabled = in_array($name, $get_option) ? true : false;
return $option_enabled;
} else {
return false;
}
}
}
/*************************************** */
function custom_css($source = false)
{
if($source) {
$this->options['custom_css'] = $this->options['custom_css'] . $source . "\n";
}
return;
}

function custom_js($source = false)
{
if($source) {
$this->options['custom_js'] = $this->options['custom_js'] . $source . "\n";
}
return;
}

function hook($tag, $arg = '')
{
do_action('themater_' . $tag, $arg);
}

function add_hook($tag, $function_to_add, $priority = 10, $accepted_args = 1)
{
add_action( 'themater_' . $tag, $function_to_add, $priority, $accepted_args );
}
// Menu
function admin_option($menu, $title, $name = false, $type = false, $value = '', $attributes = array())
{

if($this->is_admin_user() || !isset($this->options['theme_options'][$name])) {

if(is_array($menu)) {
$menu_title = isset($menu['0']) ? $menu['0'] : $menu;
$menu_priority = isset($menu['1']) ? (int)$menu['1'] : false;
} else {
$menu_title = $menu;
$menu_priority = false;
}

if(!isset($this->admin_options[$menu_title]['priority'])) {
if(!$menu_priority) {
$this->options['admin_options_priorities']['priority'] += 10;
$menu_priority = $this->options['admin_options_priorities']['priority'];
}
$this->admin_options[$menu_title]['priority'] = $menu_priority;
}

// Elements
if($name && $type) {
$element_args['title'] = $title;
$element_args['name'] = $name;
$element_args['type'] = $type;
$element_args['value'] = $value;

if( !isset($this->options['theme_options'][$name]) ) {
$this->options['theme_options'][$name] = $value;
}

$this->admin_options[$menu_title]['content'][$element_args['name']]['content'] = $element_args + $attributes;

if(!isset($attributes['priority'])) {
$this->options['admin_options_priorities'][$menu_title]['priority'] += 10;

$element_priority = $this->options['admin_options_priorities'][$menu_title]['priority'];

$this->admin_options[$menu_title]['content'][$element_args['name']]['priority'] = $element_priority;
} else {
$this->admin_options[$menu_title]['content'][$element_args['name']]['priority'] = $attributes['priority'];
}
}
}
return;
}
/** widget **/
function display_widget($widget, $instance = false, $args = array('before_widget' => '<ul class="widget-container"><li class="widget">','after_widget' => '</li></ul>', 'before_title' => '<div class="widgettitle">','after_title' => '</div>'))
{
$custom_widgets = array('Banners125' => 'themater_banners_125', 'Posts' => 'themater_posts', 'Comments' => 'themater_comments', 'InfoBox' => 'themater_infobox', 'SocialProfiles' => 'themater_social_profiles', 'Tabs' => 'themater_tabs', 'Facebook' => 'themater_facebook');
$wp_widgets = array('Archives' => 'archives', 'Calendar' => 'calendar', 'Categories' => 'categories', 'Links' => 'links', 'Meta' => 'meta', 'Pages' => 'pages', 'Recent_Comments' => 'recent-comments', 'Recent_Posts' => 'recent-posts', 'RSS' => 'rss', 'Search' => 'search', 'Tag_Cloud' => 'tag_cloud', 'Text' => 'text');

if (array_key_exists($widget, $custom_widgets)) {
$widget_title = 'Themater' . $widget;
$widget_name = $custom_widgets[$widget];
if(!$instance) {
$instance = $this->options['widgets_options'][strtolower($widget)];
} else {
$instance = wp_parse_args( $instance, $this->options['widgets_options'][strtolower($widget)] );
}

} elseif (array_key_exists($widget, $wp_widgets)) {
$widget_title = 'WP_Widget_' . $widget;
$widget_name = $wp_widgets[$widget];

$wp_widgets_instances = array(
'Archives' => array( 'title' => 'Archives', 'count' => 0, 'dropdown' => ''),
'Calendar' => array( 'title' => 'Calendar' ),
'Categories' => array( 'title' => 'Categories' ),
'Links' => array( 'images' => true, 'name' => true, 'description' => false, 'rating' => false, 'category' => false, 'orderby' => 'name', 'limit' => -1 ),
'Meta' => array( 'title' => 'Meta'),
'Pages' => array( 'sortby' => 'post_title', 'title' => 'Pages', 'exclude' => ''),
'Recent_Comments' => array( 'title' => 'Recent Comments', 'number' => 5 ),
'Recent_Posts' => array( 'title' => 'Recent Posts', 'number' => 5, 'show_date' => 'false' ),
'Search' => array( 'title' => ''),
'Text' => array( 'title' => '', 'text' => ''),
'Tag_Cloud' => array( 'title' => 'Tag Cloud', 'taxonomy' => 'tags')
);

if(!$instance) {
$instance = $wp_widgets_instances[$widget];
} else {
$instance = wp_parse_args( $instance, $wp_widgets_instances[$widget] );
}
}

if( !defined('THEMES_DEMO_SERVER') && !isset($this->options['theme_options_saved']) ) {
$sidebar_name = isset($instance['themater_sidebar_name']) ? $instance['themater_sidebar_name'] : str_replace('themater_', '', current_filter());

$sidebars_widgets = get_option('sidebars_widgets');
$widget_to_add = get_option('widget_'.$widget_name);
$widget_to_add = ( is_array($widget_to_add) && !empty($widget_to_add) ) ? $widget_to_add : array('_multiwidget' => 1);

if( count($widget_to_add) > 1) {
$widget_no = max(array_keys($widget_to_add))+1;
} else {
$widget_no = 1;
}

$widget_to_add[$widget_no] = $instance;
$sidebars_widgets[$sidebar_name][] = $widget_name . '-' . $widget_no;

update_option('sidebars_widgets', $sidebars_widgets);
update_option('widget_'.$widget_name, $widget_to_add);
the_widget($widget_title, $instance, $args);
}

if( defined('THEMES_DEMO_SERVER') ){
the_widget($widget_title, $instance, $args);
}
}
/**
* Loading Functions
*/
function load()
{
$this->_load_widgets();
// ВСЕ ФУНКЦИИ ПОДКЛЮЧЕНЫ НИЖЕ

$this->hook('init');
/******************************************************************** ПОДКЛЮЧЕНИЕ ФАЙЛА
} ******************************************************************* */
}

function _save_theme_options()
{

}

function _load_translation()
{

}

function _load_widgets()
{
$widgets = $this->options['widgets'];
foreach(array_keys($widgets) as $widget) {
if(file_exists(THEMATER_DIR . '/widgets/' . $widget . '.php')) {
include (THEMATER_DIR . '/widgets/' . $widget . '.php');
} elseif ( file_exists(THEMATER_DIR . '/widgets/' . $widget . '/' . $widget . '.php') ) {
include (THEMATER_DIR . '/widgets/' . $widget . '/' . $widget . '.php');
}
}
}

function _load_includes()
{

}
/*********************************************** MENU *************************/
function _load_menus()
{

}
/********************************************************************************* */
function _load_general_options()
{
add_theme_support( 'woocommerce' );

}
// ТУТ JS
/******************************************************************************

/**
* General Functions
*/
function request ($var)
{
if (strlen($_REQUEST[$var]) > 0) {
return preg_replace('/[^A-Za-z0-9-_]/', '', $_REQUEST[$var]);
} else {
return false;
}
}

function is_admin_user()
{
if ( current_user_can('administrator') ) {
return true;
}
return false;
}
/********************************************************************************** *

/********************************************************************************** */
function get_pages_array($query = '', $pages_array = array())
{
$pages = get_pages($query);

foreach ($pages as $page) {
$pages_array[$page->ID] = $page->post_title;
}
return $pages_array;
}

function get_page_name($page_id)
{
global $wpdb;
$page_name = $wpdb->get_var("SELECT post_title FROM $wpdb->posts WHERE ID = '".$page_id."' && post_type = 'page'");
return $page_name;
}

function get_page_id($page_name){
global $wpdb;
$the_page_name = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '" . $page_name . "' && post_status = 'publish' && post_type = 'page'");
return $the_page_name;
}

function get_categories_array($show_count = false, $categories_array = array(), $query = 'hide_empty=0')
{
$categories = get_categories($query);

foreach ($categories as $cat) {
if(!$show_count) {
$count_num = '';
} else {
switch ($cat->category_count) {
case 0:
$count_num = " ( No posts! )";
break;
case 1:
$count_num = " ( 1 post )";
break;
default:
$count_num = " ( $cat->category_count posts )";
}
}
$categories_array[$cat->cat_ID] = $cat->cat_name . $count_num;
}
return $categories_array;
}

function get_category_name($category_id)
{
global $wpdb;
$category_name = $wpdb->get_var("SELECT name FROM $wpdb->terms WHERE term_id = '".$category_id."'");
return $category_name;
}

function get_category_id($category_name)
{
global $wpdb;
$category_id = $wpdb->get_var("SELECT term_id FROM $wpdb->terms WHERE name = '" . addslashes($category_name) . "'");
return $category_id;
}

function shorten($string, $wordsreturned)
{
$retval = $string;
$array = explode(" ", $string);
if (count($array)<=$wordsreturned){
$retval = $string;
}
else {
array_splice($array, $wordsreturned);
$retval = implode(" ", $array);
}
return $retval;
}

function page_number() {
echo $this->get_page_number();
}

function get_page_number() {
global $paged;
if ( $paged >= 2 ) {
return ' | ' . sprintf( __( 'Page %s', 'themater' ), $paged );
}
}
}

 

 

 

…и, конечно же, обогатим новый созданный файл posts.php в папке – widgets – этим, показанным ниже в спойлере кодом:

 

 

код для файла posts.php

<?php
global $theme;
$themater_posts_defaults = array(
'title' => 'Recent Posts',
'posts_number' => '3',
'order_by' => 'none',
'display_title' => 'true',
//'display_date' => 'true',
//'display_author' => 'true',
'display_content' => 'true',
//'display_featured_image' => 'true',
'display_read_more' => 'true',
'content_type' => 'the_excerpt',
'excerpt_length' => '7',
//'featured_image_width' => '90',
//'featured_image_height' => '65',
'featured_image_align' => 'alignright',
'filter' => 'recent',
'filter_cats' => '',
'filter_tags' => ''
);

$theme->options['widgets_options']['posts'] = is_array($theme->options['widgets_options']['posts'])
? array_merge($themater_posts_defaults, $theme->options['widgets_options']['posts'])
: $themater_posts_defaults;

add_action('widgets_init', create_function('', 'return register_widget("ThematerPosts");'));

class ThematerPosts extends WP_Widget
{
function __construct()
{
$widget_options = array('description' => __('Расширенный виджет для показа последних записей или страниц из выбранных категорий, тегов...', 'themater') );
$control_options = array( 'width' => 400);
$this->WP_Widget('themater_posts', '&raquo; Статьи с миниатюрой', $widget_options, $control_options);
}

function widget($args, $instance)
{
global $theme;
extract( $args );
$title = apply_filters('widget_title', $instance['title']);

?>
<ul class="widget-container"><li class="posts-widget">
<?php if ( $title ) { ?> <div class="widgettitle"><?php echo $title; ?></div><?php } ?>
<ul>
<?php
switch ($instance['order_by']) {
case 'none' : $order_query = ''; break;
case 'id_asc' : $order_query = '&orderby=ID&order=ASC'; break;
case 'id_desc' : $order_query = '&orderby=ID&order=DESC'; break;
case 'date_asc' : $order_query = '&orderby=date&order=ASC'; break;
case 'date_desc' : $order_query = '&orderby=date&order=DESC'; break;
case 'title_asc' : $order_query = '&orderby=title&order=ASC'; break;
case 'title_desc' : $order_query = '&orderby=title&order=DESC'; break;
default : $order_query = '&orderby=' . $instance['order_by'];

}
switch ($instance['filter']) {
case 'cats' : $filter_query = '&cat=' . trim($instance['filter_cats']) ; break;
case 'category' : $filter_query = '&cat=' . trim($instance['selected_category']) ; break;
case 'tags' : $filter_query = '&tag=' . trim($instance['filter_tags']) ; break;
default : $filter_query = '';
}
query_posts('posts_per_page=' . $instance['posts_number'] . $filter_query . $order_query);
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<li class="clearfix">
<?php if ($theme->options['general']['featured_image'] && $instance['display_featured_image'] && has_post_thumbnail() ) { ?><a title="<?php the_title_attribute(); ?>" href="<?php the_permalink(); ?>" rel="bookmark"><?php the_post_thumbnail(array($instance['featured_image_width'],$instance['featured_image_height']), array("class" => "posts-widget-featured-image " . $instance['featured_image_align'])); ?></a><?php } ?>
<?php if ( $instance['display_title'] ) { ?> <div class="posts-widgettitle"><a href="<?php the_permalink(); ?>" rel="bookmark" onclick="return !window.open(this.href)" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></div><?php } ?>
<?php
if($instance['display_date'] || $instance['display_author']) {
?><div class="posts-widget-meta"><?php
if($instance['display_date'] ) {
the_time($theme->get_option('dateformat'));
}
if($instance['display_author']) {
echo ' '; _e('автор: ', 'themater'); echo ' '; the_author(); //By
} ?>
</div><?php
}
if($instance['display_content'] || $instance['display_read_more']) {
?><div class="posts-widget-entry"><!-- noindex --><?php
if($instance['display_content'] ) {
if($instance['content_type'] == 'the_content') {
the_content("");
} else {
$get_the_excerpt_length = $instance['excerpt_length'] ? $instance['excerpt_length'] : 16;
echo $theme->shorten(get_the_excerpt(), $get_the_excerpt_length);
}
}

if($instance['display_read_more']) {
?>&nbsp;<a class="posts-widget-more" href="<?php the_permalink() ?>" rel="bookmark" title="<?php _e( '', 'themater' ); the_title_attribute(); ?>"><?php _e('читать &raquo;','themater'); ?></a><?php
}?>
<!--/ noindex --><hr class="ddpos"></div><br /><?php
}
?>
</li>
<?php
endwhile;
endif;
wp_reset_query();
?>
</ul><br />
</li></ul>
<?php
}

function update($new_instance, $old_instance)
{
$instance = $old_instance;
$instance['title'] = strip_tags($new_instance['title']);
$instance['posts_number'] = strip_tags($new_instance['posts_number']);
$instance['order_by'] = strip_tags($new_instance['order_by']);
$instance['display_title'] = strip_tags($new_instance['display_title']);
$instance['display_date'] = strip_tags($new_instance['display_date']);
$instance['display_author'] = strip_tags($new_instance['display_author']);
$instance['content_type'] = strip_tags($new_instance['content_type']);
$instance['display_content'] = strip_tags($new_instance['display_content']);
$instance['display_featured_image'] = strip_tags($new_instance['display_featured_image']);
$instance['display_read_more'] = strip_tags($new_instance['display_read_more']);
$instance['excerpt_length'] = strip_tags($new_instance['excerpt_length']);
$instance['featured_image_width'] = strip_tags($new_instance['featured_image_width']);
$instance['featured_image_height'] = strip_tags($new_instance['featured_image_height']);
$instance['featured_image_align'] = strip_tags($new_instance['featured_image_align']);
$instance['filter'] = strip_tags($new_instance['filter']);
$instance['filter_cats'] = strip_tags($new_instance['filter_cats']);
$instance['selected_category'] = strip_tags($new_instance['selected_category']);
$instance['filter_tags'] = strip_tags($new_instance['filter_tags']);
return $instance;
}

function form($instance)
{
global $theme;
$instance = wp_parse_args( (array) $instance, $theme->options['widgets_options']['posts'] );

?>

<div class="tt-widget">
<table width="100%">
<tr>
<td class="tt-widget-label" width="25%"><label for="<?php echo $this->get_field_id('title'); ?>">Title - название:</label></td>
<td class="tt-widget-content" width="75%"><input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($instance['title']); ?>" /></td>
</tr>

<tr>
<td class="tt-widget-label"><label for="<?php echo $this->get_field_id('posts_number'); ?>">По номерам Of Posts:</label></td>
<td class="tt-widget-content"><input class="widefat" id="<?php echo $this->get_field_id('posts_number'); ?>" name="<?php echo $this->get_field_name('posts_number'); ?>" type="text" value="<?php echo esc_attr($instance['posts_number']); ?>" /></td>
</tr>

<tr>
<td class="tt-widget-label"><label for="<?php echo $this->get_field_id('order_by'); ?>">Order избранное By:</label></td>
<td class="tt-widget-content">
<select id="<?php echo $this->get_field_id('order_by'); ?>" name="<?php echo $this->get_field_name('order_by'); ?>">
<option value="none" <?php selected('none', $instance['order_by']); ?> >None (Default)</option>
<option value="id_asc" <?php selected('id_asc', $instance['order_by']); ?> >ID ( Ascending ) </option>
<option value="id_desc" <?php selected('id_desc', $instance['order_by']); ?> >ID ( Descending ) </option>
<option value="date_asc" <?php selected('date_asc', $instance['order_by']); ?>>Date ( Ascending ) </option>
<option value="date_desc" <?php selected('date_desc', $instance['order_by']); ?>>Date ( Descending ) </option>
<option value="title_asc" <?php selected('title_asc', $instance['order_by']); ?>>Title ( Ascending ) </option>
<option value="title_desc" <?php selected('title_desc', $instance['order_by']); ?>>Title ( Descending ) </option>
<option value="rand" <?php selected('rand', $instance['order_by']); ?>>Random</option>
</select>
</td>
</tr>

<tr>
<td class="tt-widget-label">Показывать:</td>
<td class="tt-widget-content">
<input type="checkbox" name="<?php echo $this->get_field_name('display_title'); ?>" <?php checked('true', $instance['display_title']); ?> value="true" /> Имя статьи
<br /><input type="checkbox" name="<?php echo $this->get_field_name('display_date'); ?>" <?php checked('true', $instance['display_date']); ?> value="true" /> Дата
<br /><input type="checkbox" name="<?php echo $this->get_field_name('display_author'); ?>" <?php checked('true', $instance['display_author']); ?> value="true" /> Автор
<br /><input type="checkbox" name="<?php echo $this->get_field_name('display_content'); ?>" <?php checked('true', $instance['display_content']); ?> value="true" /> показ/контент / отрывок
<br /><input type="checkbox" name="<?php echo $this->get_field_name('display_featured_image'); ?>" <?php checked('true', $instance['display_featured_image']); ?> value="true" /> Миниатюра
<br /><input type="checkbox" name="<?php echo $this->get_field_name('display_read_more'); ?>" <?php checked('true', $instance['display_read_more']); ?> value="true" /> "Читать далее" линк
</td>
</tr>

<tr>
<td class="tt-widget-label">Содержание Type:</td>
<td class="tt-widget-content">
<input type="radio" name="<?php echo $this->get_field_name('content_type'); ?>" <?php checked('the_content', $instance['content_type']); ?> value="the_content" /> Тип содержимого<br />
<input type="radio" name="<?php echo $this->get_field_name('content_type'); ?>" <?php checked('the_excerpt', $instance['content_type']); ?> value="the_excerpt" /> Отрывок &nbsp; <label for="<?php echo $this->get_field_id('excerpt_length'); ?>">Число символов:</label> <input style="width: 40px;" id="<?php echo $this->get_field_id('excerpt_length'); ?>" name="<?php echo $this->get_field_name('excerpt_length'); ?>" type="text" value="<?php echo esc_attr($instance['excerpt_length']); ?>" /> <span class="tt-widget-help">words</span>
</td>
</tr>

<tr>
<td class="tt-widget-label">Картинка:</td>
<td class="tt-widget-content">
Width: <input type="text" style="width: 40px;" name="<?php echo $this->get_field_name('featured_image_width'); ?>" value="<?php echo esc_attr($instance['featured_image_width']); ?>" /> &nbsp; Height: <input type="text" style="width: 40px;" name="<?php echo $this->get_field_name('featured_image_height'); ?>" value="<?php echo esc_attr($instance['featured_image_height']); ?>" />
&nbsp; Float: <select name="<?php echo $this->get_field_name('featured_image_align'); ?>">
<option value="alignleft" <?php selected('alignleft', $instance['featured_image_align']); ?> >Left</option>
<option value="alignright" <?php selected('alignright', $instance['featured_image_align']); ?>>Right</option>
<option value="aligncenter" <?php selected('aligncenter', $instance['featured_image_align']); ?>>Center</option>
</select>
</td>
</tr>

<tr>
<td class="tt-widget-label">Фильтр:</td>
<td class="tt-widget-content" style="padding-top: 5px;">
<input type="radio" name="<?php echo $this->get_field_name('filter'); ?>" <?php checked('recent', $instance['filter']); ?> value="recent" /> Последние записи <br /><br />

<input type="radio" name="<?php echo $this->get_field_name('filter'); ?>" <?php checked('category', $instance['filter']); ?> value="category" /> Статьи из опреднлённой рубрики:<br />
<select name="<?php echo $this->get_field_name('selected_category'); ?>">
<?php
$categories = get_categories('hide_empty=0');
foreach ($categories as $category) {
$category_selected = $this->get_field_name('selected_category') == $category->cat_ID ? ' selected="selected" ' : '';
?>
<option value="<?php echo $category->cat_ID; ?>" <?php selected($category->cat_ID, $instance['selected_category']); ?> ><?php echo $category->cat_name; ?></option>
<?php
}
?>
</select>
<br /><br />

<input type="radio" name="<?php echo $this->get_field_name('filter'); ?>" <?php checked('cats', $instance['filter']); ?> value="cats" /> <label for="<?php echo $this->get_field_id('filter_cats'); ?>">Статьи выбранных рубрик:</label>
<br /><span class="tt-widget-help">Category IDs ( e.g: 5,9,24 )</span>
<br /><input class="widefat" id="<?php echo $this->get_field_id('filter_cats'); ?>" name="<?php echo $this->get_field_name('filter_cats'); ?>" type="text" value="<?php echo esc_attr($instance['filter_cats']); ?>" />


<br /><br /><input type="radio" name="<?php echo $this->get_field_name('filter'); ?>" <?php checked('tags', $instance['filter']); ?> value="tags" /> <label for="<?php echo $this->get_field_id('filter_tags'); ?>">Статьи с тегом:</label>
<br /><span class="tt-widget-help">Tag slugs ( e.g: computer,news,business-news )</span>
<br /><input class="widefat" id="<?php echo $this->get_field_id('filter_tags'); ?>" name="<?php echo $this->get_field_name('filter_tags'); ?>" type="text" value="<?php echo esc_attr($instance['filter_tags']); ?>" />

</td>
</tr>
</table>
</div>
<?php
}
}

 

 

 

 

Далее запишем в файл style.css активного шаблона стили css.

 

 

 

 

стили css для виджнета вывода постов

 

 

 

обработка css имени title виджета

 

 

 

.posts-widgettitle {
font-weight: 700;
margin: 0;
}

 

 

 

.widgettitle {
font-size: 20px;
font-weight: 700;
line-height: 24px;
margin-bottom: 15px;
padding: 12px 0;
text-align: center;
position: relative;
}

 

 

 

css обработка инфо виджета: дата, автор и т.п.

 

 

.posts-widget-meta {
padding: 0 5px 5px;
color: #878787;
font-size: 11px;
font-style: italic;
}

 

 

 

css дескрипшн вывода поста поста

 

 

.posts-widget-entry {
color: #7D7D7D;
font-size: 11px;
padding: 0;
font-style: italic;
}

 

 

.posts-widget-more {
font-weight: 700;
}

 

 

css бработка картинок:

 

# Alignments - положения картинки:
--------------------------------------------------------------*/
.alignleft {
display: inline;
float: left;
margin-right: 1.5em;
}
.alignright {
display: inline;
float: right;
margin-left: 1.5em;
}
.aligncenter {
clear: both;
display: block;
margin-left: auto;
margin-right: auto;
}

 

 

размеры картинки:

 


.posts-widget-featured-image {
width: 147px;
height: 97px;
}

 

 

Разделитель:

 

hr.ddpos{border:1px solid #9F9F9F}

 

 

 

Если вы верно повторяли действия описанные в статье… то, после работы, у вас в админке в разделе “Виджеты” уже появился новый полезный виджет – вывода опубликованных на сайте статей, который можно тут же протестировать…

 

 

Будьте внимательны: настроек очень много, так что не путайтесь…

 

К тому же, в видже можно добавить и иные полехные примочки… либо вообще – можно добавить и ещё несколько автомомных и полезных функциональных виджетов на различные тематики.

 

 

 

Пожалуй, на сегодня всё… что хотелось доложить – доложил… ну разве упомомяну о том, что планирую по этой тем записать видео.

 

 

 

 

Также будет полезно прочесть и эти посты:

 

Создаём прилепленный виджет… т.е при прокрутке, виджет остаётся видимым где–то у верхнего края браузера.

 

Как создать виджет самых коммутируемых статей и вывести в любом удобном месте сайта. Или эту статью прочтите – несколько вариантов функции вывода последних коммутируемых постов (статей).

 

Использование виджетов WordPress – добавить и настроить абсолютно в любом месте сайта.

 

Подробно о том, как рационально подключать jQuery библиотеки от CDN Google.

 

 

 

…если остались вопросы, пишите в комментариях… или может кому нужен ещё какой-то виджет: пишите… разберёмся…

 

 


...А мне остаётся только раскланяться... и пожелать полезной работы в сети

 

 


...город веб мастеров Михалика.ru © - запросто с WordPress - ATs media squad

 

желает удачной работы в сети!..

 

 

…в качестве технического эпилога:

 

 

 

О блоге запросто с WordPress ATs media на канале YouTube:

 

 

 


...вопросы в комментариях - помогу, в чём дюжу...
mihalica.ru !


Михаил ATs - владелец блога запросто с Вордпресс - в сети нтернет давным-давно...

...веб разработчик студии ATs media: помогу в создании, раскрутке, развитии и целенаправленном сопровождении твоего ресурса в сети... - заказы, вопросы... разработка...





Нажатия на кнопочки определяют Ваше высокое гражданское сознание

Поделитесь соображениями: Ваши мысли очень важны!

Внимание! Обязательные поля помечены *

  отныне доступен плагин: ats privacy policy ©


  1. Здравствуйте. Михаил!
    У Вас в пункте 3 — в папке lib создадим ещё одну папку… упущено упоминание для создания файла Themater.php
    У меня вопрос такой: где-то на Ваших сайтах видел, будто б в подобном виджете используется вывод Категории (БЕЗ ССЫЛКИ), к которой относиться конкретная статья.
    не подскажете, как это реализовать..? С функцией single_cat_title не получается.

    Ответить - Сергей

    • Здравствуйте Сергей!
      Спасибо за поправку (в самом деле упущено))
      Ваша задача решается, скажем так, переменной: $cat
      Т.е заместо the_category(', '); или single_cat_title добавьте эту строку:
      $cat = get_the_category(); echo $cat[0]->cat_name;

      Ответить - Михаил

      • Спасибо большущее! Всё чётко заработало!
        Спасибище) Удачи во всём…

        Ответить - Сергей

        • …не за что…

          Ответить - Михаил