带自定义$ tax_query属性的自定义简码

问题描述

我正在尝试在Wordpress中创建一个自定义的简码,它将允许我放置一个属性来指定类别并在名为“ case_studies”的自定义帖子类型中进行查询。这种分类法本身称为“ case_study_categories”,正如您所见,我将默认设置为“室内家具”。

我需要的是使短代码看起来像这样: [get_project_gallery order =“ ASC” tax_query =“ flooring”]

理想情况下,我放置的shortcode属性将覆盖默认的“ interior-interior”,而使用“ flooring”显示适当的帖子。实际上,我认为我什至根本不需要定义默认值(因此,如果未指定任何属性,它将仅获取所有case_studies帖子),但我也无法使其正常工作。

顺便说一句,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()如果不存在则返回假值,因此应将其包装在if语句中,以防由于某些原因而找不到图像(损坏,删除,忘记添加等)。另外,您在$page->ID中有一个get_the_post_thumbnail_url()变量-但是函数中似乎没有global $page吗?确保这是您要在其中使用的变量。

使用类似我提供的代码的代码,您可以[get_project_gallery order="ASC" terms="flooring"]做您想做的事情,甚至添加多个[get_project_gallery order="ASC" terms="flooring,something-else,a-third-thing"]-只需将shortcode属性与您要覆盖的参数匹配即可:{ {1}}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...