Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何有条件地删除商店页面上的视频替换产品图像

如何有条件地删除商店页面上的视频替换产品图像
EN

WordPress Development用户
提问于 2020-04-23 15:45:25
回答 1查看 393关注 0票数 0

我正在开发WordPress (woocommerce)插件。

如果从特定产品的shop链接设置了video链接,如果没有设置video链接,我想要显示相关的产品image,那么我想要用video替换产品图像(D3页面),我怎么能这样做?

Code我正在使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_action( 'init', array($this, 'show_video_if_set_else_image') );
public function show_video_if_set_else_image(){

    add_action('woocommerce_before_shop_loop_item_title', 'show_video');
    function show_video(){
        $linkk = get_post_meta(get_the_ID(), 'YT_video_link', true);
        $linkk = substr($linkk, -11);
        if($linkk != ''){
            echo 'show video';
            remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );

            ?>

我也问了这里这个问题,请看一下。我对php中的OOP有点陌生,如果load是== empty,那么在其他部分应该做些什么,因为对于某些产品,图像加载了twice (查看给定的链接),这对我来说有点出乎意料。

请帮忙,非常感谢。谢谢。

当我在remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );部件中执行else时,它仍然加载第二个产品image,尽管为该产品设置了video,为什么会这样呢?

EN

回答 1

WordPress Development用户

回答已采纳

发布于 2020-04-23 19:36:25

它负载了两次,我相信它是由于另一个钩子也存在。您可能需要移除另一个不必要的钩子。实际上,您不必在另一个钩子中运行动作woocommerce_before_shop_loop_item_title

类删除操作的

示例

如果您想在类中放置一个remove_action,可以使用不同的方法。下面的示例说明了两种方法。下面的类被证明适用于放置默认的商店主题的functions.php或插件,只要站点运行时不受其他插件的干扰。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class example {
    public function __construct() {
        // option1: place here will work
        remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );

        // wrong demonstration: will not work because original call is not a class, it is not necessary to use class method to remove
        // remove_action( 'woocommerce_before_shop_loop_item_title', array( $this 'woocommerce_template_loop_product_thumbnail' ), 10 );

        add_action( 'init', array( $this, 'init' ) );
    }

    // option2: if you want to ***group different actions*** together, it also works.
    public function init() {
        // place here also work
        // remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );

        // other remove actions or actions
    } 
}

new example();

个人动作

如果您将动作移出init钩子,然后重试并移除不需要的钩子。如果您想在没有init挂钩的情况下将其添加到插件中,只需这样修改即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// your ' show_video' is already doing the job `show_video_if_set_else_image`
// so you might want to change this function name too
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
add_action('woocommerce_before_shop_loop_item_title', array($this, 'show_video' ) );

    function show_video(){
        $linkk = get_post_meta(get_the_ID(), 'YT_video_link', true);
        $linkk = substr($linkk, -11);
        if($linkk != ''){
            echo 'show video';
            // if you put remove_action, it will not work as expected because the remove_action is run after add_action, so before it removes, it run already.

            ?>

关于优先级

如果你想改变标题挂钩的优先级,你只需要调整优先级,比如add_action( 'woocommerce_before_shop_loop_item_title', 'some_function', 50 );。

WordPress钩子系统是一个基于事件的系统。它遵循一系列称为筛选器或操作的事件。通常,过滤器允许您覆盖一个值,而操作允许您执行额外的作业。所以它是按照优先级和顺序运行的。对于行动来说,它会在特定的时间起作用。所以一次只做一份工作。除非有特殊的原因,否则大多数情况下都不需要使用其他作业来添加作业。因为action本身独立存在于do_action()定义的不同点。

即使添加了init钩子,woocommerce_before_shop_loop_item_title的队列仍然在do_action( 'woocommerce_before_shop_loop_item_title')运行,不会在更早的时候运行。更改钩子的优先级是同一个钩子,因为可能会有其他要重写的操作。然后,您可以调整钩子以便稍后运行,以确保您的重写工作。

关于double running

可能有一些现有的woocommerce_before_shop_loop_item_title操作在做类似的事情。因此,如果它输出两次,因为您只输出了一次,而原始动作输出了一次。

如果你想删除现有的行动(S)。只需运行:(以下是Woocommerce默认操作)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );

您可以参考remove_action()

钩子名称、函数名和优先级必须与原始名称相同,以便删除它,因此您可以参考该源代码或在文件夹中查找代码以获得准确的信息。

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/364912

复制
相关文章
【jquery基础】按钮禁用和启用
在html标签中设置按钮被禁用,可以使用如下代码 <input type='button' id='test' value='disabled'> 在jquery中可以使用attr()函数修改按钮的disable属性 $(“#test”).attr(‘disabled',false); jquery 控制button的disabled属性
用户5640963
2019/07/25
4.6K0
Jquery禁用/启用按钮与文本框代码
在jquery中如果要禁止文框与按钮恢复效果我们需要动态设置disabled即可了,如果要设置为只读我们只要设置readonly即可。
botkenni
2022/01/10
2.3K0
IQKeyboardManager 启用/禁用
1.在摸个界面完全禁用IQKeyboard - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; //TODO: 页面appear 禁用 [[IQKeyboardManager sharedManager] setEnable:NO]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:anim
developerbfl
2018/06/05
2.5K0
Vbs 禁用启用网卡
在实际工作中,经常碰到需要通过脚本启用禁用网卡的情况,在网上找了一个脚本,实际是通过模拟键盘操作来启用禁用,但对于多种系统和比较复杂的情况操作性不好。
力哥聊运维与云计算
2019/06/28
2K0
Spring boot with Schedule (启用/禁用)
本文节选自《Netkiller Java 手札》 5.19.4. 计划任务控制 matchIfMissing = true, 如果改属性条目不存在返回 true @ConditionalOnProperty("batch.metrics.export.influxdb.enabled") # mybean.enabled = true @ConditionalOnProperty(value='mybean.enabled') @ConditionalOnProperty(value = "endp
netkiller old
2018/03/05
2.8K0
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
指定元素中包含 id 属性的, 如: $("span[id]")  代码如下: <span id="span1" name="S1">AAA</span><br/>  <span id="span2" name="S2">BBB</span><br/>  <span name="Sx3">CCC</span><br/>  <span name="Sx4">DDD</span><br/>  <div id="div1" name="Dx1">EEE</div>  <div name="D2">FFF</div
hbbliyong
2018/03/06
1.6K0
jquery 表单验证
("form :input.required").each(function(){
用户5760343
2019/10/10
3.6K0
jquery 表单验证
jquery 表单事件
.blur()    当元素失去焦点的时候触发事件。   .blur(handler(eventObject))     handler(eventObject)       每当事件触发时候执行的函数。   .blur([eventData],handler(eventObject))     eventData       一个对象,它包含的数据键值对映射将被传递给事件处理程序。     handler(eventObject)       每当事件
用户1197315
2018/01/19
1.5K0
Linux 中如何启用和禁用网卡?
当你添加一个网卡或者从一个物理网卡创建出一个虚拟网卡的时候,你可能需要使用这些命令将新网卡启用起来。另外,如果你对网卡做了某些修改或者网卡本身没有启用,那么你也需要使用以下的某个命令将网卡启用起来。
用户4988085
2021/09/14
18.6K0
jquery根据属性选择
有信仰的人不会孤独。——阿列克谢耶维奇 分享一个jquery选择器的小技巧 我们可以通过自定义属性键值选中一个元素 例如如下元素: <div ruben="vampire">阿超</div> 然后我们通过ruben=vampire选中这个div 就可以如下写法: let vampire = $('div[ruben="vampire"]') 我们可以简单测试一下输出里面的内容 <div ruben="vampire">阿超</div> <script type="text/javascript">
阿超
2022/08/17
1.9K0
jquery根据属性选择
JQuery表格表单操作
1、多选框应用代码示例 <form action=”#” method=”post”> 你喜欢的明星是?<br /> <input type=”checkbox” name=”boxs” value=”张嘉译” id=”1″ /><label for=”1″>张嘉译</label> <input type=”checkbox” name=”boxs” value=”周润发” id=”2″ /><label for=”2″>周润发</label> <input type=”checkbox” name=”bo
苦咖啡
2018/05/07
1.5K0
bootstrapValidator 中文API
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
颍川
2019/11/21
13.2K1
jquery 操作表单表格
$("tr:contains('王五')").addClass("selected")
用户5760343
2019/10/08
1.5K0
jquery 操作表单表格
Jquery 异步提交表单
前台部分代码: <div id='error'></div><!--错误提示信息--> <input type='text' id='username' name='username' readonly='Readonly'/><!--readonly为只读--> <input type='password' id='password' name='password'> <input type='text' id='company' name='company'> <input type='text'
用户1503405
2021/09/23
3K0
JQuery 学习—JQuery Validation表单验证范例[通俗易懂]
jQuery Validato表单验证插件,它是基于jQuery类库,实现了js脚本于页面html代码的分离。你可以划分多个校验组,每个组的校验都是互不影响。对一个表单对象,你只需要写一行代码就可以轻松实现无数种(理论上)脚本控制。
全栈程序员站长
2022/07/19
1.8K0
Element 根据描述展示表单
假如数据格式如下: formData: [ { title: "气密性测试", param: [ { mode: "检查方式1", way: "单选", required: "Y", content: ["检漏仪", "u形管"], value: "检漏仪"
一只图雀
2020/09/21
9190
Oracle 启用被禁用的外键
在Oracle中,面对已经被禁用的外键,我们该如何将它重新启用呢?本教程就为大家带来Oracle外键启用方法。
用户8965210
2021/09/02
8280
PHP过滤表单字段
从post来的进行addslashes后就可存入数据库了,取出后直接echo即可 普通的文本: 1.htmlspecialchars接着addslashes存入数据库,取出后直接echo即可。 2.addslashes存入数据库,取出后htmlspecialchars输出。 说明: addslashes仅仅是为了让原来的字符正确地进入数据库。 htmlspecialchars是吧html标签转化掉。
黄啊码
2020/05/29
3.1K0
用jquery实现表单验证_jquery验证插件
功能强大的 jQuery 表单验证插件,适用于日常的 E-mail、电话号码、网址等验证及 Ajax 验证,除自身拥有丰富的验证规则外,还可以添加自定义的验证规则。
全栈程序员站长
2022/11/09
4.3K0
点击加载更多

相似问题

jQuery Ajax文件上传formData

12

基于Laravel后端的资源+ FormData文件上传

10

用jquery和FormData上传文件

12

jquery文件上传formData输入名称

13

在Express中访问文件上传formData

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文