Wordpress 在短代码中插入参数?
Wordpress Insert Parameters In Shortcode?
我只和 几个 front-end 编辑一起工作。
在这些编辑器 非常不同 并且 不灵活的情况下! 我使用 code snippets 来显示我需要的信息处处一致。
它如此简单以至于我觉得没有人理解我在做什么或试图做什么。请仔细阅读并查看插图。
以我今天为例
我有一个名为 property_city 的分类法附加到 CTP“属性”(没什么特别的)
它让我感兴趣,因为我想以这种方式显示它的条款
[Parent] -> [Child of parent] -> [Child of parent] -> 等所有层次结构方式
让我们尝试post一个广告好吗?
我的公寓位于曼哈顿,所以我选择了曼哈顿。默认情况下 parent New York 不显示。
使用这个 代码片段 是可能的
(/!\ 别搞混了,我们只使用片段代码,没有 php 文件或模板来修改。我们只是注入一个片段。/!)
function taxonomy_hierarchy() {
global $post;
$post_id = $post->ID;
$return = '';
$terms = wp_get_post_terms( $post->ID, 'property_city' ); //Put your custom taxonomy term here
foreach ( $terms as $term ) {
// this gets the parent of the current post taxonomy
if ($term->parent != 0) {
$return .= $term->name. ', ' .get_term( $term->parent, 'property_city' )->name;
} else {
$return .= $term->name;
}
}
return $return;
}
add_shortcode( 'parent-child', 'taxonomy_hierarchy' );
完成! 纽约,现在显示曼哈顿。
我的问题是如何制作这个简码[parent-child]更灵活?
仅输出文本 (=nolink) parameter 或输出 links (=link).
在我们的示例中,它将看起来像这样
[parent-child=nolink] 对于我的循环,例如
[parent-child=link] posts.
如果您知道如何操作,谢谢
看一下 add_shortcode()
documentation,您会看到回调函数传递了三个参数。最重要(并且与此相关)的是第一个 $atts
参数。
我会这样做:
add_shortcode( 'parent-child', 'taxonomy_hierarchy' );
function taxonomy_hierarchy( $atts ){
$atts = shortcode_atts( array(
'link' => true,
'taxonomy' => 'property_city'
), $atts, 'parent-child' );
global $post;
$terms = wp_get_post_terms( $post->ID, $taxonomy );
/* You can pass conditions here to override
* the link var based on certain conditions. If
* it's a single post, current user is editor, etc.
*/
ob_start();
foreach( $terms as $term ){
if( $term->parent != 0 ){
$parent_term = get_term( $term->parent, $taxonomy );
echo (filter_var($atts['link'], FILTER_VALIDATE_BOOLEAN)) ? sprintf( '<a href="%s">%s</a>, ', esc_url( get_term_link($parent_term) ), $parent_term->name ) : "{$parent_term->name}, " ;
}
echo (filter_var($atts['link'], FILTER_VALIDATE_BOOLEAN)) ? sprintf( '<a href="%s">%s</a>', esc_url( get_term_link($term) ), $term->name ) : $term->name ;
}
return ob_get_clean();
}
这,使用 shortcode_atts()
function 允许您为简码设置一些默认参数。我还设置了它 taxonomy
也可以被覆盖,这使得它更具可扩展性(供以后使用,在其他项目中等)
与字符串连接 (imo) 相比,我也稍微更改了代码以使用 Output Buffering
since it's a bit faster and cleaner when dealing with Ternary Comparisons 和这样的输出。
它所做的是在确定输出链接名称或纯文本名称之前检查是否传递了 $link
属性,并将结果回显到输出缓冲区。
这将使您获得以下结果:
[parent-child]
• <a href="#">New York</a>
• <a href="#">New York</a>, <a href="#">Manhattan</a>
[parent-child link="true"]
• <a href="#">New York</a>
• <a href="#">New York</a>, <a href="#">Manhattan</a>
[parent-child link="false"]
• New York
• New York, Manhattan
[parent-child link="false" taxonomy="some_other_taxonomy"]
• Top Level Term
• Top Level Term, Child Level Term
等等。正如我在 PHP 评论中提到的,您可以在 foreach
循环之前的任何时候根据您想要的任何条件覆盖 $link
布尔值。因此,如果 is_single()
为真,您可以使 $link
始终 return 为真,或者如果当前用户不是编辑者,则始终 return 为假,或者您能想到的任何其他内容的。
文档和函数参考:
Function
Description
add_shortcode()
Adds a new shortcode.
shortcode_atts()
Combine user attributes with known attributes and fill in defaults when needed.
ob_start(); ob_get_clean();
Output Control, pause script output (besides headers)
(condition) ? true : false
Shorthand comparison expression to evaluate a result.
我只和 几个 front-end 编辑一起工作。 在这些编辑器 非常不同 并且 不灵活的情况下! 我使用 code snippets 来显示我需要的信息处处一致。
它如此简单以至于我觉得没有人理解我在做什么或试图做什么。请仔细阅读并查看插图。
以我今天为例
我有一个名为 property_city 的分类法附加到 CTP“属性”(没什么特别的)
它让我感兴趣,因为我想以这种方式显示它的条款 [Parent] -> [Child of parent] -> [Child of parent] -> 等所有层次结构方式
让我们尝试post一个广告好吗?
我的公寓位于曼哈顿,所以我选择了曼哈顿。默认情况下 parent New York 不显示。
使用这个 代码片段 是可能的
(/!\ 别搞混了,我们只使用片段代码,没有 php 文件或模板来修改。我们只是注入一个片段。/!)
function taxonomy_hierarchy() {
global $post;
$post_id = $post->ID;
$return = '';
$terms = wp_get_post_terms( $post->ID, 'property_city' ); //Put your custom taxonomy term here
foreach ( $terms as $term ) {
// this gets the parent of the current post taxonomy
if ($term->parent != 0) {
$return .= $term->name. ', ' .get_term( $term->parent, 'property_city' )->name;
} else {
$return .= $term->name;
}
}
return $return;
}
add_shortcode( 'parent-child', 'taxonomy_hierarchy' );
完成! 纽约,现在显示曼哈顿。
我的问题是如何制作这个简码[parent-child]更灵活? 仅输出文本 (=nolink) parameter 或输出 links (=link).
在我们的示例中,它将看起来像这样
[parent-child=nolink] 对于我的循环,例如
[parent-child=link] posts.
如果您知道如何操作,谢谢
看一下 add_shortcode()
documentation,您会看到回调函数传递了三个参数。最重要(并且与此相关)的是第一个 $atts
参数。
我会这样做:
add_shortcode( 'parent-child', 'taxonomy_hierarchy' );
function taxonomy_hierarchy( $atts ){
$atts = shortcode_atts( array(
'link' => true,
'taxonomy' => 'property_city'
), $atts, 'parent-child' );
global $post;
$terms = wp_get_post_terms( $post->ID, $taxonomy );
/* You can pass conditions here to override
* the link var based on certain conditions. If
* it's a single post, current user is editor, etc.
*/
ob_start();
foreach( $terms as $term ){
if( $term->parent != 0 ){
$parent_term = get_term( $term->parent, $taxonomy );
echo (filter_var($atts['link'], FILTER_VALIDATE_BOOLEAN)) ? sprintf( '<a href="%s">%s</a>, ', esc_url( get_term_link($parent_term) ), $parent_term->name ) : "{$parent_term->name}, " ;
}
echo (filter_var($atts['link'], FILTER_VALIDATE_BOOLEAN)) ? sprintf( '<a href="%s">%s</a>', esc_url( get_term_link($term) ), $term->name ) : $term->name ;
}
return ob_get_clean();
}
这,使用 shortcode_atts()
function 允许您为简码设置一些默认参数。我还设置了它 taxonomy
也可以被覆盖,这使得它更具可扩展性(供以后使用,在其他项目中等)
与字符串连接 (imo) 相比,我也稍微更改了代码以使用 Output Buffering
since it's a bit faster and cleaner when dealing with Ternary Comparisons 和这样的输出。
它所做的是在确定输出链接名称或纯文本名称之前检查是否传递了 $link
属性,并将结果回显到输出缓冲区。
这将使您获得以下结果:
[parent-child]
• <a href="#">New York</a>
• <a href="#">New York</a>, <a href="#">Manhattan</a>
[parent-child link="true"]
• <a href="#">New York</a>
• <a href="#">New York</a>, <a href="#">Manhattan</a>
[parent-child link="false"]
• New York
• New York, Manhattan
[parent-child link="false" taxonomy="some_other_taxonomy"]
• Top Level Term
• Top Level Term, Child Level Term
等等。正如我在 PHP 评论中提到的,您可以在 foreach
循环之前的任何时候根据您想要的任何条件覆盖 $link
布尔值。因此,如果 is_single()
为真,您可以使 $link
始终 return 为真,或者如果当前用户不是编辑者,则始终 return 为假,或者您能想到的任何其他内容的。
文档和函数参考:
Function | Description |
---|---|
add_shortcode() |
Adds a new shortcode. |
shortcode_atts() |
Combine user attributes with known attributes and fill in defaults when needed. |
ob_start(); ob_get_clean(); |
Output Control, pause script output (besides headers) |
(condition) ? true : false |
Shorthand comparison expression to evaluate a result. |