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\' );