WordPress快捷代码在一个页面上多次使用时的唯一ID?

时间:2014-11-06 作者:Alamin

我目前正在编写一个WordPress短代码,其中包含一些javascript。为了让javascript正常工作,我需要使用一个具有唯一#ID的div。如果短代码使用一次,它就可以正常工作,但是如果他们在一个页面上多次使用短代码,就会破坏javascript。

所以,我想知道是否有某种方法可以在每次调用短代码时使用唯一的ID?或者,如果短代码在一个页面上使用了多次,是否可以使用其他ID?

1 个回复
SO网友:Christopher Sample

我想为那些需要帮助的人举例说明答案。

如何计算帖子中的短代码可能的原因:

具有唯一id的相同短代码的多个实例需要相同的短代码输出唯一类每次调用设置一个变量计数器来统计短代码使用情况如何统计当前页面上使用短代码的次数为每个短代码设置唯一递增数为数据属性设置一个随机数shortcode使用静态变量计算每个shortcode调用

https://www.php.net/manual/en/language.variables.scope.php#language.variables.scope.static

使用具有int值的静态变量static $count = 1; 调用时,我们可以使用$count++;. 我使用它将自定义ID添加到SwiperJS幻灯片放映短代码的输出html中,该短代码可以拉入我在同一页面上重复使用的自定义帖子类型特征图像。SwiperJS要求每个元素都有一个唯一的类。有了这个新的唯一ID,javascript可以将每个对象初始化为唯一对象或用于样式设计目的。

示例1 PHP

add_shortcode(\'count_example\', \'count_example_shortcode\');
function count_example_shortcode( $atts = [], $content = null) {
    
// Options
ob_start();

/**
* Static variable
*/
static $count = 1; // if your prefer to start with zero change to 0

    $atts = shortcode_atts(
        [
            // Shortcode Attribute defaults
            \'count\' => \'true\', 
        ],
        $atts
    );

    
        // You can check if shortcode attribute is set 
        if ($atts[\'count\'] == true) {
           echo \'<div id="example-\'.$count.\'">html stuff</div>\';

        // or check the string value of attribute
        } elseif ($atts[\'count\'] == "true") {
           echo \'<div id="example-\'.$count.\'">html stuff</div>\';

        // Use this below if no attributes are set
        else {
           echo \'<div id="example">html stuff</div>\';
        }

/**
* Increment int variable $count for each shortcode call
*/
    $count++;

    return ob_get_clean();

}

示例1短代码
[count_example count="foo"]
[count_example count="true"]
[count_example]
示例1输出
<div id="example-1">html stuff</div>
<div id="example-2">html stuff</div>
<div id="example">html stuff</div>
多层示例需要一个计数器,并且需要唯一的ID、类或数据属性,请考虑使用uniqueid()random_int().

add_shortcode(\'count_example\', \'count_example_shortcode\');
function count_example_shortcode( $atts = [], $content = null) {
    
// Options
ob_start();

/**
* Static Variable Counter, UniqueID, or Random_int
*/
$count = 1;

$prefix = \'example-\';
$uniqueID = $uniqid = uniqid($prefix); // https://www.php.net/manual/en/function.uniqid

$random_integer = random_int(100, 999); // https://www.php.net/manual/en/function.random-int.php

    // Attributes not used in this example, kept in example for complete structure
    $atts = shortcode_atts(
        [
            \'count\' => \'true\', 
        ],
        $atts
    );
        
        echo \'<div class="exammple-\'.$count.\'" id="\'.$uniqueID.\'" data-id="\'.$random_integer.\'">html stuff</div>\';

    return ob_get_clean();

}

示例2短代码
[count_example]
[count_example]
示例2输出
<div class="example-1" id="example-4b3403665fea6" data-id="735">html stuff</div>
<div class="example-2" id="example-4fe424wg4w33f" data-id="924">html stuff</div>

结束

相关推荐

OOP and WordPress shortcode

我试图通过这种方式添加一个短代码class MyPlugin { function __construct() { $this->make_shortcode(); } function ShowMsg($cls, $lst4) { $data = shortcode_atts(array(\'phn\' => \'\', \'msg\' => \'\'), $atts);