Ändern Sie den Post-Typ abhängig vom Shortcode

Ist es möglich, 2 Shortcodes mit derselben function zu verwenden und nur den Post-Typ in der function zu ändern, je nachdem, welcher Shortcode es ist?

Zum Beispiel, wenn ich all_faq verwende, sollte der Post-Typ faq sein. Wenn ich wordpress_faq verwende, sollte der Post-Typ wp-Faq . Es funktioniert jetzt, aber ist es möglich, den Code in einer function kürzer zu machen? Wie wenn all_faq wird, ändere den Post-Typ in faq und ansonsten, wenn wordpress faq wird, ändere den Post-Typ in wp-faq .

 //shortcode NORMAL FAQ add_shortcode( 'all_faq', 'display_custom_post_type' ); function display_custom_post_type(){ $args = array( 'post_type' => 'Faq', 'post_status' => 'publish', 'posts_per_page' => '-1' ); $string = ''; $query = new WP_Query( $args ); if( $query->have_posts() ){ $string .= '
'; $string .= '
'; while( $query->have_posts() ){ $query->the_post(); $string .= '
'; $string .= '
' . get_the_title() . '
'; $string .= '
' . get_the_content() . '
'; $string .= '
'; } $string .= '
'; $string .= '
'; } wp_reset_postdata(); return $string; } //shortcode WORDPRESS FAQ add_shortcode( 'wordpress_faq', 'display_wordpress_faq' ); function display_wordpress_faq(){ $args = array( 'post_type' => 'wp-Faq', 'post_status' => 'publish', 'posts_per_page' => '-1' ); $string = ''; $query = new WP_Query( $args ); if( $query->have_posts() ){ $string .= '
'; $string .= '
'; while( $query->have_posts() ){ $query->the_post(); $string .= '
'; $string .= '
' . get_the_title() . '
'; $string .= '
' . get_the_content() . '
'; $string .= '
'; } $string .= '
'; $string .= '
'; } wp_reset_postdata(); return $string; }

Solutions Collecting From Web of "Ändern Sie den Post-Typ abhängig vom Shortcode"

die Callback-function hat 3 Parameter und der 3. ist der Tag-Name:

 add_shortcode( 'all_faq', 'commonFunction' ); add_shortcode( 'wordpress_faq', 'commonFunction' ); function commonFunction($attr, $content, $tag) { $cores = [ "all_faq" => "Faq", "wordpress_faq" => "wp-Faq", ]; $args = array( 'post_type' => $cores[$tag], 'post_status' => 'publish', 'posts_per_page' => '-1' ); // ... } 

Vielleicht könnten Sie das Problem umkehren. Was Sie brauchen, ist einfach ein Argument zu Ihrem Shortcode hinzuzufügen und auf diese Weise können Sie nur eine function und einen Shortcode haben. Sie könnten so etwas zu Beginn Ihrer function haben:

 $atts = shortcode_atts( array( 'posttype' => 'Faq' ), $atts, 'all_faq' ); $args = array( 'post_type' => $atts['posttype'], 'post_status' => 'publish', 'posts_per_page' => '-1' ); 

Dann können Sie Ihren Shortcode mit einem neuen Parameter verwenden: [all_faq posttype="Faq"]

Ich hoffe, das hilft.