وردپرس قسمت پنجاه و پنجم

وردپرس قسمت پنجاه و پنجم

وردپرس قسمت پنجاه و پنجم

کلاس ویجت ذخیره گزینه ها را برای شما انجام می دهد. حتما تنظیمات ویجت را پاکسازی کنید. هم siteid و هم disp_number باید همیشه یک عدد باشند، بنابراین از تابع absint() برای بررسی اینکه این عدد یک عدد صحیح مثبت است استفاده کنید.
مرحله آخر نمایش ویجت است.
//display the widget
function widget( $args, $instance ) {
extract( $args );
echo $before_widget;
//load the widget options
$title = apply_filters( 'widget_title', $instance['title'] );
$siteid = empty( $instance['siteid'] ) ? 1 :
$instance['siteid'];
$disp_number = empty( $instance['disp_number'] ) ? 5 :
$instance['disp_number'];
//display the widget title
if ( !empty( $title ) ) {
echo $before_title . esc_html( $title ) . $after_title;
}
echo '<ul>';
ابتدا متغیر args $ را استخراج کنید تا به مقادیر تم جهانی مانند $before_widget و $after_widget دسترسی پیدا کنید. سپس تنظیمات ویجت را بارگیری کنید. متغیرهای $siteid و $disp_number هر دو از یک عملگر سه تایی برای تنظیم مقادیر خود استفاده می کنند. این بدان معناست که اگر مقدار گزینه خالی باشد، روی یک مقدار پیش فرض تنظیم می شود. $siteid به طور پیش فرض 1 و $disp_number به طور پیش فرض 5 خواهد بود.
اکنون $title را که با مقادیر تم جهانی $before_title و $after_title احاطه شده است نمایش دهید. اکنون زمان نمایش پست های اخیر از سایت ذخیره شده در ویجت است.
//switch to site saved
switch_to_blog( absint( $siteid ) );
//create a custom loop
$recent_posts = new WP_Query();
$recent_posts->query( 'posts_per_page='
. absint( $disp_number ) );
//start the custom loop
while ( $recent_posts->have_posts() ) :
$recent_posts->the_post();
//display the recent post title with link
echo '<li><a href="' . get_permalink() . '">'
. get_the_title() . '</a></li>';
endwhile;
//restore the current site
restore_current_blog();
echo '</ul>';
echo $after_widget;
}
}
با استفاده مجدد از تابع switch_to_blog()، ویجت به سایت ذخیره شده در تنظیمات ویجت سوئیچ می کند. پس از بارگذاری سایت، یک حلقه سفارشی با استفاده از کلاس WP_Query ایجاد کنید. پارامتر پرس و جو posts_per_page با تنظیم ویجت $disp_number تعریف می شود. پست های اخیر در یک لیست نامرتب با استفاده از حلقه while نمایش داده می شوند. پس از تکمیل حلقه، باید سایت فعلی را با استفاده ازrestore_current_blog () بازیابی کنید.
شما اکنون یک ویجت Multisite دارید تا به راحتی پست ها را از هر سایتی در شبکه خود نمایش دهید! این مثال ساده قدرت جمع‌آوری محتوا را در سراسر یک شبکه Multisite در وردپرس نشان می‌دهد و انجام آن چقدر آسان است.
<?php
/*
Plugin Name: Multisite Recent Posts Widget
Plugin URI: https://example.com
Description: Retrieves the most recent posts in a Multisite network
Author: Brad Williams
Version: 1.0
Author URI: https://wrox.com
*/
//widgets_init action hook to execute custom function
add_action( 'widgets_init', 'pdev_multisite_register_widget' );
//register our widget
function pdev_multisite_register_widget() {
register_widget( 'pdev_multisite_widget' );
}
//pdev_multisite_widget class
class PDEV_Multisite_Widget extends WP_Widget {
//process our new widget
function __construct() {
$widget_ops = array( 'classname' => 'pdev_multisite_widget',
'description' =>
'Display recent posts from a network site.' );
parent::__construct( 'pdev_multisite_widget_posts',
'Multisite Recent Posts', $widget_ops );
}
//build our widget settings form
function form( $instance ) {
global $wpdb;
$defaults = array( 'title' => 'Recent Posts',
'disp_number' => '5' );
$instance = wp_parse_args( (array) $instance, $defaults );
$title = $instance['title'];
$siteid = $instance['siteid'];
$disp_number = $instance['disp_number'];
//title textfield widget option
echo '<p>Title: <input class="widefat" name="'
.$this->get_field_name( 'title' )
. '" type="text" value="' .esc_attr( $title )
. '"/></p>';