我正在尝试删除一个操作并以不同的优先级添加它。 以下是帮助生成消息的所有代码片段:
包括所需的前端文件
private function frontend_includes() {
require_once( $this->get_plugin_path() . '/includes/wc-memberships-template-functions.php' );
require_once( $this->get_plugin_path() . '/includes/class-wc-memberships-shortcodes.php' );
WC_Memberships_Shortcodes::initialize();
$this->frontend = $this->load_class( '/includes/frontend/class-wc-memberships-frontend.php', 'WC_Memberships_Frontend' );
$this->checkout = $this->load_class( '/includes/frontend/class-wc-memberships-checkout.php', 'WC_Memberships_Checkout' );
$this->restrictions = $this->load_class( '/includes/frontend/class-wc-memberships-restrictions.php', 'WC_Memberships_Restrictions' );
}
获取商品限购信息
/**
* @param int $post_id Optional. Defaults to current post.
* @return string
*/
public function get_product_purchasing_restricted_message( $post_id = null ) {
if ( ! $post_id ) {
global $post;
$post_id = $post->ID;
}
$products = $this->get_products_that_grant_access( $post_id );
$message = $this->get_restriction_message( 'product_purchasing_restricted', $post_id, $products );
/**
* Filter the product purchasing restricted message
*
* @since 1.0.0
* @param string $message The restriction message
* @param int $product_id ID of the product being restricted
* @param array $products Array of product IDs that grant access to this product
*/
return apply_filters( 'wc_memberships_product_purchasing_restricted_message', $message, $post_id, $products );
}
限制类,处理前端的内容限制
class WC_Memberships_Restrictions {
/** @var array associative array of content conditions for current user **/
private $user_content_access_conditions;
/** @var array of post IDs that content restriction has been applied to **/
private $content_restriction_applied = array();
/** @var string Product content restriction password helper **/
private $product_restriction_password = null;
/** @var bool Product thumbnail removed helper **/
private $product_thumbnail_restricted = false;
public function __construct() {
// Desired action to remove and re-prioritize
add_action( 'woocommerce_single_product_summary', array( $this, 'single_product_purchasing_restricted_message' ), 30 );
}
}
我实际上只需要在 WC_Memberships_Restrictions 类的操作中将优先级从 30 更改为 15。问题是没有明确的方法来调用删除。有什么建议吗?
最佳答案
您提供的代码显示 WC_Memberships_Restrictions 类的实例存储在主类的 restrictions 属性中。
$this->restrictions = $this->load_class( '/includes/frontend/class-wc-memberships-restrictions.php', 'WC_Memberships_Restrictions' );
从那里我只需要查找如何访问主成员资格类的实例,从您看到的主插件文件的底部:
/**
* Returns the One True Instance of Memberships
*
* @since 1.0.0
* @return WC_Memberships
*/
function wc_memberships() {
return WC_Memberships::instance();
}
这意味着现在要访问限制类的实例,我们需要访问主类的限制属性。虽然这听起来很清楚,但基本上是这样的:
wc_memberships()->restrictions
知道这一点,我们就可以知道从该类中删除和添加操作:
function so_41431558_change_hook_priority(){
if( function_exists( 'wc_memberships' ) ){
remove_action( 'woocommerce_single_product_summary', array( wc_memberships()->restrictions, 'single_product_purchasing_restricted_message' ), 30 );
add_action( 'woocommerce_single_product_summary', array( wc_memberships()->restrictions, 'single_product_purchasing_restricted_message' ), 15 );
}
}
add_action( 'woocommerce_single_product_summary', 'so_41431558_change_hook_priority', 1 );
关于php - 从 PHP 类中删除_action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41431558/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
我有一个rubyonrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin
让多条路线去同一条路的最优雅的方式是什么ControllerAction?我有:get'dashboard',to:'dashboard#index'get'dashboard/pending',to:'dashboard#index'get'dashboard/live',to:'dashboard#index'get'dashboard/sold',to:'dashboard#index'这很丑陋。有什么“更优雅”的建议吗?一个类轮的奖励积分。 最佳答案 为什么不只有一个路由和一个Controller操作,并根据传递给它的参数来
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于