我正在Business Lounge theme中使用RT themes和Elementor。
Wordpress版本为当前版本(5.2.1)
在团队页面(演示:https://businesslounge-demo.rtthemes.com/our-team/)上有一个团队成员卡片列表。我想将团队成员的顺序更改为当前无法选择的选项。
团队成员列表使用简码[staff_box]
在Elementor编辑模式下,我看起来像这样:
编辑表单在
中定义
wp-content/plugins/businesslounge-extensions/inc/elementor-addons/staff.php
<?php
namespace Elementor;
// ...
class Widget_RT_Staff extends Widget_Base {
// ...
protected function _register_controls() {
// ...
$this->add_control(
'list_orderby',
[
'label' => esc_html_x( 'List Order By', 'Admin Panel','businesslounge' ),
'description' => esc_html_x('Sorts the posts by this parameter', 'Admin Panel','businesslounge' ),
'type' => Controls_Manager::SELECT,
'default' => "date",
"options" => array(
'date' => esc_html_x('Date',"Admin Panel","businesslounge"),
'author' => esc_html_x('Author',"Admin Panel","businesslounge"),
'title' => esc_html_x('Title',"Admin Panel","businesslounge"),
'modified' => esc_html_x('Modified',"Admin Panel","businesslounge"),
'ID' => esc_html_x('ID',"Admin Panel","businesslounge"),
'rand' => esc_html_x('Randomized',"Admin Panel","businesslounge"),
)
]
);
// ...
}
// ...
}
Plugin::instance()->widgets_manager->register_widget_type( new Widget_RT_Staff() );
<?php
vc_map(
array(
'base' => 'staff_box',
'name' => _x( 'Team', 'Admin Panel','businesslounge' ),
'icon' => 'rt_theme rt_team',
'category' => array(_x( 'Content', 'Admin Panel','businesslounge' ), _x( 'Theme Addons', 'Admin Panel','businesslounge' )),
'description' => _x( 'Displays team members', 'Admin Panel','businesslounge' ),
'params' => array(
// ...
array(
'param_name' => 'list_orderby',
'heading' => _x( 'List Order By', 'Admin Panel','businesslounge' ),
"description" => _x("Sorts the posts by this parameter",'Admin Panel','businesslounge'),
'type' => 'dropdown',
"value" => array(
_x('Date','Admin Panel','businesslounge') => 'date',
_x('Author','Admin Panel','businesslounge') => 'author',
_x('Title','Admin Panel','businesslounge') => 'title',
_x('Modified','Admin Panel','businesslounge') => 'modified',
_x('ID','Admin Panel','businesslounge') => 'ID',
_x('Randomized','Admin Panel','businesslounge') => 'rand',
),
'save_always' => true
),
// ...
输出定义在
wp-content/plugins/businesslounge-extensions/inc/shortcodes/staff_box.php
像这样:
<?php
function rt_staff( $atts, $content = null ) {
// ...
//defaults
extract(shortcode_atts(array(
"id" => 'staff-'.rand(100000, 1000000),
"class" => "",
"list_layout" => "1/1",
"list_orderby" => "date",
"list_order" => "DESC",
"ids" => array(),
"box_style" => ""
), $atts));
// ...
//general query
$args=array(
'post_status' => 'publish',
'post_type' => 'staff',
'orderby' => $list_orderby,
'order' => $list_order,
'showposts' => 1000
);
// ...
$theQuery = query_posts($args);
// ...
我想做什么:
在选择框中添加一个选项'post_name'
,以便我可以按其他字段对团队进行排序。我要添加
'Post name' => 'post_name',
如何在不更改原始源代码的情况下执行此操作?
我已经激活了business_lounge主题的子主题。
我需要为此自定义扩展程序吗?
答案 0 :(得分:1)
您必须修改原始代码。
除非作者对返回的值应用filter
或使用action
,否则您无法覆盖该函数。
正如gael在他的回答中指出的那样,您可以通过将原始代码复制到子主题的functions.php
中,然后重命名该函数来减轻更新丢失的影响,例如添加到您的修改中之前,将其更改为my_rt_staff()
。
但是,您仍然需要在插件中调用my_rt_staff()
而不是rt_stuff
,并且每当更新插件时都必须进行此更改,但是您不会丢失代码。< / p>
(也许您可以在修改后的"list_orderby" => "date"
方法中将默认的简码属性中的"list_orderby" => "post_name",
更改为my_rt_staff()
作为默认值,以便它按名称顺序默认而不是日期)
但是,这在您的特定情况下无济于事,因为您需要对控件本身进行理想的修改,即对_register_controls()
类中的Widget_RT_Staff
方法进行修改。您可以通过扩展Widget_RT_Staff
来覆盖它,但是仍然需要调用新类,这会导致您修改插件代码。
在没有看到Widget_RT_Staff
类如何影响短路符的情况下,我不确定这是否可行,但是基于rt_staff()
方法,如果您将短代码用作[staff_box orderby="post_name"]
,无需触摸任何代码即可获得预期的结果。
答案 1 :(得分:0)
您应该能够通过“覆盖”此处所述的功能来修改插件,而不会失去更新功能:
https://stackoverflow.com/a/40856197/3623080
在子主题的functions.php中复制该功能,对其进行自定义和重命名,以代替原始功能。
希望这会有所帮助