我目前正在为一个客户机修改一个购买的主题,该客户机需要几个插件才能正常工作。所需的插件之一,创建一个显示帖子类型的小部件,客户端希望删除一些显示的字段。
很容易进入插件和编辑,问题解决了。当然,这不是好的做法。我想知道,如果一个如何创建一个自定义插件,可以超过所需插件的一些功能。看起来这应该是一种合理的行动,但在最佳实践方面有点迷失。几个问题。
以下是需要覆盖的类的开头:
add_action(\'widgets_init\', \'gdlr_lms_recent_course_widget\');
if( !function_exists(\'gdlr_lms_recent_course_widget\') ){
function gdlr_lms_recent_course_widget() {
register_widget( \'Goodlayers_Lms_Recent_Course\' );
}
}
if( !class_exists(\'Goodlayers_Lms_Recent_Course\') ){
class Goodlayers_Lms_Recent_Course extends WP_Widget{
// Initialize the widget
function __construct() {
parent::WP_Widget(
\'gdlr-lms-recent-course-widget\',
__(\'Goodlayers Recent Course Widget\',\'gdlr-lms\'),
array(\'description\' => __(\'A widget that shows latest courses\', \'gdlr-lms\')));
}
// Output of the widget
function widget( $args, $instance ) {
global $gdlr_lms_option;
$title = apply_filters( \'widget_title\', $instance[\'title\'] );
$category = $instance[\'category\'];
$num_fetch = $instance[\'num_fetch\'];
// Opening of widget
echo $args[\'before_widget\'];
// Open of title tag
if( !empty($title) ){
echo $args[\'before_title\'] . $title . $args[\'after_title\'];
}
// Widget Content
$current_post = array(get_the_ID());
$query_args = array(\'post_type\' => \'course\', \'suppress_filters\' => false);
$query_args[\'posts_per_page\'] = $num_fetch;
$query_args[\'orderby\'] = \'post_date\';
$query_args[\'order\'] = \'desc\';
$query_args[\'paged\'] = 1;
$query_args[\'course_category\'] = $category;
$query_args[\'ignore_sticky_posts\'] = 1;
$query_args[\'post__not_in\'] = array(get_the_ID());
$query = new WP_Query( $query_args );
if($query->have_posts()){
echo \'<div class="gdlr-lms-course-widget">\';
while($query->have_posts()){ $query->the_post();
echo \'<div class="recent-course-widget">\';
gdlr_lms_print_course_thumbnail(\'thumbnail\');
echo \'<div class="recent-course-widget-content">\';
echo \'<div class="recent-course-widget-title"><a href="\' . get_permalink() . \'" >\' . get_the_title() . \'</a></div>\';
echo \'<div class="recent-course-widget-info blog-info">\';
echo \'<span class="gdlr-head">\' . __(\'Created on\', \'gdlr-lms\') . \'</span> \';
echo get_the_time($gdlr_lms_option[\'date-format\']);
echo \'</div>\';
echo \'</div>\';
echo \'<div class="clear"></div>\';
echo \'</div>\';
}
echo \'<div class="clear"></div>\';
echo \'</div>\';
}
wp_reset_postdata();
// Closing of widget
echo $args[\'after_widget\'];
}
几个问题:我相信
if(!class_exists(...
允许在其他地方创建类,允许重写,但这似乎不起作用。我应该得到关于已经定义的类的错误吗?
是使用my own扩展此类并对add_action
语句,然后添加我自己的?
我以前是一名程序编程人员,刚刚进入我的第一组自定义类。如果我扩展这个类,构造函数还会调用父类的父类吗,还是需要添加parent::__construct
进入我的构造函数?
我找到了几个这样的例子,但它们都很老了,不能完全解释一切。我想了解一下这一点,因为当客户端站点不想完全定制时,在对其进行修改时,此功能将非常有用。