带有自定义 $tax_query 属性的自定义简码
Custom Shortcode w/ Custom $tax_query Attribute
我正在尝试在 Wordpress 中创建一个自定义简码,它可以让我放置一个属性来指定一个类别,并在名为“case_studies”的自定义 post 类型中进行查询。分类法本身称为“case_study_categories”,如您所见,我将默认设置为“furniture-interior”。
我需要的是短代码看起来像这样:
[get_project_gallery order="ASC" tax_query="flooring"]
理想情况下,我放置的短代码属性将覆盖默认的“furniture-interior”,而是使用“flooring”来显示适当的 posts。实际上,我认为我什至根本不需要定义默认值(所以如果没有指定属性,它只会得到所有 case_studies posts)但我无法得到它要么工作。
顺便说一句,order 的属性完全按照我想要的方式工作——它覆盖了定义的默认值。我只是不知道如何用 $tax_query.
来完成这件事
如能提供任何帮助,我们将不胜感激。提前谢谢大家!
这是我的代码:
function project_gallery_function($atts, $content = null) {
extract(shortcode_atts(array(
'order' => 'DESC',
'orderby' => 'date',
'tax_query' => array(
array(
'taxonomy' => 'case_study_categories',
'field' => 'slug',
'terms' => 'furniture-interior'
)
)
), $atts));
$args = array(
'post_type' => 'case_studies',
'post_status' => 'publish',
'posts_per_page' => '4',
'order' => $order,
'orderby' => $orderby,
'tax_query' => array($tax_query)
);
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
echo '<aside class="grid-gallery four-col grid-gap-4">';
while ( $the_query->have_posts() ) {
$the_query->the_post();
$gallery_thumb = get_the_post_thumbnail_url( $page->ID, 'thumbnail' );
echo '<a href="'. get_the_permalink() .'" class="x-image mobx sub-img" data-rel="gallery-1"><img src="'. $gallery_thumb .'" alt="" /></a>';
}
echo '</aside>';
}
/* Restore original Post Data */
wp_reset_postdata();
}
add_shortcode( 'get_project_gallery', 'project_gallery_function' );
除非您计划实际重做整个 tax_query
,否则您不应该担心整个 tax_query
。您应该考虑将其更改为仅使用 $terms
,因为这是您要用短代码替换的唯一部分(您不需要重建整个数组)。
其次,确保您的代码使用间距和缩进规范化 - 未来您会感谢您的深谋远虑!
最后,您可以考虑将更多变量传递给数组以使其更具可扩展性 - $posts_per_page
、$taxonomy
等
function project_gallery_function( $atts, $content = null ){
extract( shortcode_atts( array(
'terms' => 'furniture-interior',
'field' => 'slug',
'order' => 'DESC',
'orderby' => 'date',
'taxonomy' => 'case_study_categories',
'post_type' => 'case_studies',
'posts_per_page' => 4,
), $atts ) );
$tax_query = array(
array(
'taxonomy' => $taxonomy,
'field' => $field,
'terms' => explode(',', preg_replace('/\s+/', '', $terms)), // Force to array, allowing comma sep values
)
);
$args = array(
'post_type' => $post_type,
'post_status' => 'publish',
'posts_per_page' => $posts_per_page,
'order' => $order,
'orderby' => $orderby,
'tax_query' => array( $tax_query )
);
// The Query
$the_query = new WP_Query( $args );
// The Loop
if( $the_query->have_posts() ){
echo '<aside class="grid-gallery four-col grid-gap-4">';
while( $the_query->have_posts() ){
$the_query->the_post();
if( $gallery_thumb = get_the_post_thumbnail_url( $page->ID, 'thumbnail' ) ){
printf( '<a href="%s" class="x-image mobx sub-img" data-rel="gallery-1"><img src="%s" alt="" /></a>', get_the_permalink(), $gallery_thumb );
}
}
echo '</aside>';
}
/* Restore original Post Data */
wp_reset_postdata();
}
add_shortcode( 'get_project_gallery', 'project_gallery_function' );
一些其他注意事项,get_the_post_thumbnail_url()
returns 如果不存在则为假值,因此您应该将其包装在 if
语句中以防无法显示图像出于某种原因发现(损坏、删除、忘记添加等)。另外,您在 get_the_post_thumbnail_url()
中有一个 $page->ID
变量 - 但函数中似乎没有 global $page
?确保那是你想在那里使用的变量。
使用像我提供的那样的代码可以让你做你想做的事,[get_project_gallery order="ASC" terms="flooring"]
,甚至可以添加多个 [get_project_gallery order="ASC" terms="flooring,something-else,a-third-thing"]
- 只需将短代码属性与你想要覆盖的参数匹配: [get_project_gallery order="ASC" terms="flooring,something-else,a-third-thing" posts_per_page="15"]
我正在尝试在 Wordpress 中创建一个自定义简码,它可以让我放置一个属性来指定一个类别,并在名为“case_studies”的自定义 post 类型中进行查询。分类法本身称为“case_study_categories”,如您所见,我将默认设置为“furniture-interior”。
我需要的是短代码看起来像这样: [get_project_gallery order="ASC" tax_query="flooring"]
理想情况下,我放置的短代码属性将覆盖默认的“furniture-interior”,而是使用“flooring”来显示适当的 posts。实际上,我认为我什至根本不需要定义默认值(所以如果没有指定属性,它只会得到所有 case_studies posts)但我无法得到它要么工作。
顺便说一句,order 的属性完全按照我想要的方式工作——它覆盖了定义的默认值。我只是不知道如何用 $tax_query.
来完成这件事如能提供任何帮助,我们将不胜感激。提前谢谢大家! 这是我的代码:
function project_gallery_function($atts, $content = null) {
extract(shortcode_atts(array(
'order' => 'DESC',
'orderby' => 'date',
'tax_query' => array(
array(
'taxonomy' => 'case_study_categories',
'field' => 'slug',
'terms' => 'furniture-interior'
)
)
), $atts));
$args = array(
'post_type' => 'case_studies',
'post_status' => 'publish',
'posts_per_page' => '4',
'order' => $order,
'orderby' => $orderby,
'tax_query' => array($tax_query)
);
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
echo '<aside class="grid-gallery four-col grid-gap-4">';
while ( $the_query->have_posts() ) {
$the_query->the_post();
$gallery_thumb = get_the_post_thumbnail_url( $page->ID, 'thumbnail' );
echo '<a href="'. get_the_permalink() .'" class="x-image mobx sub-img" data-rel="gallery-1"><img src="'. $gallery_thumb .'" alt="" /></a>';
}
echo '</aside>';
}
/* Restore original Post Data */
wp_reset_postdata();
}
add_shortcode( 'get_project_gallery', 'project_gallery_function' );
除非您计划实际重做整个 tax_query
,否则您不应该担心整个 tax_query
。您应该考虑将其更改为仅使用 $terms
,因为这是您要用短代码替换的唯一部分(您不需要重建整个数组)。
其次,确保您的代码使用间距和缩进规范化 - 未来您会感谢您的深谋远虑!
最后,您可以考虑将更多变量传递给数组以使其更具可扩展性 - $posts_per_page
、$taxonomy
等
function project_gallery_function( $atts, $content = null ){
extract( shortcode_atts( array(
'terms' => 'furniture-interior',
'field' => 'slug',
'order' => 'DESC',
'orderby' => 'date',
'taxonomy' => 'case_study_categories',
'post_type' => 'case_studies',
'posts_per_page' => 4,
), $atts ) );
$tax_query = array(
array(
'taxonomy' => $taxonomy,
'field' => $field,
'terms' => explode(',', preg_replace('/\s+/', '', $terms)), // Force to array, allowing comma sep values
)
);
$args = array(
'post_type' => $post_type,
'post_status' => 'publish',
'posts_per_page' => $posts_per_page,
'order' => $order,
'orderby' => $orderby,
'tax_query' => array( $tax_query )
);
// The Query
$the_query = new WP_Query( $args );
// The Loop
if( $the_query->have_posts() ){
echo '<aside class="grid-gallery four-col grid-gap-4">';
while( $the_query->have_posts() ){
$the_query->the_post();
if( $gallery_thumb = get_the_post_thumbnail_url( $page->ID, 'thumbnail' ) ){
printf( '<a href="%s" class="x-image mobx sub-img" data-rel="gallery-1"><img src="%s" alt="" /></a>', get_the_permalink(), $gallery_thumb );
}
}
echo '</aside>';
}
/* Restore original Post Data */
wp_reset_postdata();
}
add_shortcode( 'get_project_gallery', 'project_gallery_function' );
一些其他注意事项,get_the_post_thumbnail_url()
returns 如果不存在则为假值,因此您应该将其包装在 if
语句中以防无法显示图像出于某种原因发现(损坏、删除、忘记添加等)。另外,您在 get_the_post_thumbnail_url()
中有一个 $page->ID
变量 - 但函数中似乎没有 global $page
?确保那是你想在那里使用的变量。
使用像我提供的那样的代码可以让你做你想做的事,[get_project_gallery order="ASC" terms="flooring"]
,甚至可以添加多个 [get_project_gallery order="ASC" terms="flooring,something-else,a-third-thing"]
- 只需将短代码属性与你想要覆盖的参数匹配: [get_project_gallery order="ASC" terms="flooring,something-else,a-third-thing" posts_per_page="15"]