提问人:webkoncept 提问时间:2/14/2021 最后编辑:LoicTheAztecwebkoncept 更新时间:2/15/2021 访问量:105
jQuery 到 PHP:如果有多个子元素,则向子元素添加选择器类
jQuery to PHP: Add a selector class to children elements if more than one
问:
是否可以在 PHP 中实现与下面的 jQuery 代码相同的东西?
我用它来隐藏从批发商进口产品时出现的错误。
这是我使用的jQuery代码:
jQuery(document).ready(function( $ ){
$('.woocommerce-product-details__short-description:has(p:nth-of-type(2)) p').addClass('ukryj-klase-krotki');
});
它是如何工作的:
jQuery 检查产品简短描述中是否有多个元素。如果还有更多 - 它会将类“ukryj-klase-krotki”添加到所有元素中。然后我添加CSS类来隐藏产品简短描述中生成的第一个元素,因此我唯一想要的元素是可见的:<p>
<p>
<p>
CSS代码:
.woocommerce-product-details__short-description .ukryj-klase-krotki{
display: none;
}
.woocommerce-product-details__short-description .ukryj-klase-krotki ~ .ukryj-klase-krotki{
display: block;
}
有什么帮助吗?
答:
0赞
Vincenzo Di Gaetano
2/14/2021
#1
如果您想安装插件来添加脚本,请在此处查看:https://it.wordpress.org/plugins/search/header+and+footer+scripts/。
如果你想改用PHP代码,你需要在活动主题的functions.php
文件中添加以下代码(如果我在子主题中使用它):
// add custom class
add_action( 'wp_footer', 'add_custom_class' );
function add_custom_class() {
?>
<script type="text/javascript">
jQuery(document).ready(function($){
$('.woocommerce-product-details__short-description:has(p:nth-of-type(2)) p').addClass('ukryj-klase-krotki');
});
</script>
<?php
}
如上述评论所示,您应该尽快通过更改不正确的产品数据来解决问题。
评论
0赞
webkoncept
2/14/2021
这只是我在 PHP 函数中插入的代码 - 它仍然是 jQuery。我正在寻找PHP解决方案 - 而不是jQuery。我写这段代码是为了展示我想在 PHP 中实现的目标。
3赞
LoicTheAztec
2/14/2021
#2
首先阅读模板结构和通过主题覆盖模板,了解如何通过活动子主题覆盖WooCommerce模板文件。
要覆盖的模板是单产品/简短描述.php
复制到“woocommerce”文件夹>“single-product”子文件夹中的chid主题后,打开/编辑文件,并替换为:short-description.php
<?php
/**
* Single product short description
*
* This template can be overridden by copying it to yourtheme/woocommerce/single-product/short-description.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 3.3.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
global $post;
$short_description = apply_filters( 'woocommerce_short_description', $post->post_excerpt );
if ( ! $short_description ) {
return;
}
if ( $short_description && substr_count($short_description, '</p>') > 1 ) {
$short_description = str_replace( ['<p class="', '<p>'], ['<p class="ukryj-klase-krotki ', '<p class="ukryj-klase-krotki">'], $short_description );
}
?>
<div class="woocommerce-product-details__short-description<?php echo $class; ?>">
<?php echo $short_description; // WPCS: XSS ok. ?>
</div>
在这里,使用 substr_count() php 函数,我们从产品简短描述中计算(结束标签)的数量,以使用 str_replace
()
函数将作为类选择器添加到所有子标签中。经过测试并有效。</p>
ukryj-klase-krotki
<p>
评论
0赞
webkoncept
2/15/2021
我按照你写的做了所有事情,不幸的是它不起作用。无论哪种方式,我都不想更改父 DIV 类,而是更改其子类 - 如果有超过 1 个。就像我写的jQuery代码一样。
0赞
webkoncept
2/15/2021
我不知道这是否重要,但我使用的是 WooCommerce 5.0 和最新的 PHP 版本
评论
.woocommerce-product-details__short-description p + p