如何将一个短码中的内容转换为另一个短码?

时间:2021-05-30 作者:Nisal Devinda

我有两个短代码,[参考]和[参考]。我需要获取[参考]短代码内的内容,并在调用[参考]短代码时将其输出。

例如:;

输入-这是网页中短代码之外的一些内容。[参考]这是短代码中的一些内容;请参阅;。这是一些其他内容。参考文献:[参考文献]

预期输出-这是网页中短代码之外的一些内容。这是一些其他内容。参考文献:这是shortcode中的一些内容;请参阅;。

这是我尝试使用的代码,但我无法让它显示内容。

function ref_shortcode( $atts , $content = null ){
    ob_start();
    static $i=1;
    $return_value = \'<a href="https://localhost/reference-list/?page_id=12&preview=true#references"><sup>[\'.$i.\']</sup></a>\';
    $i++;
    return $return_value;
    return ob_get_clean();
}
global $my_content;
$my_content = add_shortcode( \'ref\', \'ref_shortcode\' );

function references_shortcode( $atts , $content = null ){
    ob_start();
    global $my_content;
    return \'<li>\' . $my_content . \'</li>\';
    return ob_get_clean();
}
add_shortcode( \'references\' , \'references_shortcode\');
“我对”的函数没有异议;参考;shortcode,如果有什么方法可以将其中的内容;参考文件;这将是伟大的短代码!

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

WordPress中没有明确的方法可以做到这一点,但这里有一些选项供您选择:

使用全局变量存储引用列表,即中的内容[ref]content here[/ref]. 但我个人不建议也不会使用全局变量。

使用一个定制的PHP类,在该类中添加快捷码函数作为方法,然后使用属性(例如。private $ref_list = [];) 存储引用列表。例如ref_shortcode() 方法,你可以$this->ref_list[] = $content;.

使用object caching API in WordPress, e、 g.使用wp_cache_set() 存储引用列表。

我并没有要求您使用上面的第三个选项,但由于您的代码最初不在PHP类中,因此这里有一个使用对象缓存API的工作示例:

function ref_shortcode( $atts = array(), $content = null ) {
    if ( ! empty( $content ) ) {
        $post_id = get_the_ID();

        // Retrieve current list of references for the current post.
        $refs = wp_cache_get( "post_{$post_id}_references" );
        $refs = is_array( $refs ) ? $refs : array();

        // Then add the current reference to the list.
        $refs[] = $content;
        wp_cache_set( "post_{$post_id}_references", $refs );

        $j = count( $refs );
        return "<a href=\'#ref-$post_id-$j\'><sup>[$j]</sup></a>";
    }

    return \'\';
}
add_shortcode( \'ref\', \'ref_shortcode\' );

function references_shortcode( $atts = array(), $content = null ) {
    $post_id = get_the_ID();
    $refs = (array) wp_cache_get( "post_{$post_id}_references" );
    $output = \'\';

    if ( ! empty( $refs ) ) {
        $output = \'<h3>References</h3>\';
        $output .= \'<ul>\';

        foreach ( $refs as $i => $ref ) {
            $j = $i + 1;
            $output .= "<li id=\'ref-$post_id-$j\'>$ref</li>";
        }

        $output .= \'</ul>\';
    }

    return $output;
}
add_shortcode( \'references\' , \'references_shortcode\' );