AnsPress_BasePage_Shortcode()
Description #
Class for AnsPress base page shortcode
Source #
File: includes/shortcode-basepage.php
class AnsPress_BasePage_Shortcode { /** * Instance. * * @var Instance */ protected static $instance = null; /** * Get current instance. */ public static function get_instance() { // Create an object. if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; // Return the object. } /** * Current page * * @var string * @since 4.1.9 */ public $current_page = ''; /** * Control the output of [anspress] shortcode. * * @param array $atts { * Attributes of the shortcode. * * @type string $categories Slug of question_category * @type string $tags Slug of question_tag * @type string $tax_relation Taxonomy relation, see here @link https://codex.wordpress.org/Taxonomies * @type string $tags_operator Operator for question_tag taxonomy * @type string $categories_operator Operator for question_category taxonomy * @type string $page Select a page to display. * @type boolean $hide_list_head Hide list head? * @type string $order_by Sort by. * } * @param string $content Shortcode content. * @return string * @since 2.0.0 * @since 3.0.0 Added new attribute `hide_list_head` and `attr_order_by`. */ public function anspress_sc( $atts, $content = '' ) { global $ap_shortcode_loaded; // Drop current page variable cache. As we are allowing to change page from shortcode. wp_cache_delete( 'current_page', 'anspress' ); // Check if AnsPress shortcode already loaded. if ( true === $ap_shortcode_loaded ) { return __( 'AnsPress shortcode cannot be nested.', 'anspress-question-answer' ); } wp_enqueue_script( 'anspress-theme' ); wp_enqueue_style( 'anspress-main' ); wp_enqueue_style( 'anspress-fonts' ); $ap_shortcode_loaded = true; $this->attributes( $atts, $content ); ob_start(); echo '<div id="anspress" class="anspress">'; /** * Action is fired before loading AnsPress body. */ do_action( 'ap_before' ); // Include theme file. ap_page( $this->current_page ); echo '</div>'; // Linkback to author. if ( ! ap_opt( 'author_credits' ) ) { echo '<div class="ap-cradit">' . esc_attr__( 'Question and answer is powered by', 'anspress-question-answer' ) . ' <a href="https://anspress.net" target="_blank">anspress.net</a></div>'; } wp_reset_postdata(); $ap_shortcode_loaded = false; return ob_get_clean(); } /** * Get attributes from shortcode and set it as query var. * * @param array $atts Attributes. * @param string $content Content. * * @since 3.0.0 * @since 4.1.8 Added `post_parent` attribute. */ public function attributes( $atts, $content ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundAfterLastUsed global $wp; if ( isset( $atts['categories'] ) ) { $categories = explode( ',', str_replace( ', ', ',', $atts['categories'] ) ); $wp->set_query_var( 'ap_categories', $categories ); } if ( isset( $atts['tags'] ) ) { $tags = explode( ',', str_replace( ', ', ',', $atts['tags'] ) ); $wp->set_query_var( 'ap_tags', $tags ); } if ( isset( $atts['tax_relation'] ) ) { $tax_relation = $atts['tax_relation']; $wp->set_query_var( 'ap_tax_relation', $tax_relation ); } if ( isset( $atts['tags_operator'] ) ) { $tags_operator = $atts['tags_operator']; $wp->set_query_var( 'ap_tags_operator', $tags_operator ); } if ( isset( $atts['categories_operator'] ) ) { $categories_operator = $atts['categories_operator']; $wp->set_query_var( 'ap_categories_operator', $categories_operator ); } // Load specefic AnsPress page. if ( isset( $atts['page'] ) ) { $this->current_page = $atts['page']; set_query_var( 'ap_page', $atts['page'] ); $_GET['ap_page'] = $atts['page']; } if ( isset( $atts['hide_list_head'] ) ) { set_query_var( 'ap_hide_list_head', (bool) $atts['hide_list_head'] ); $_GET['ap_hide_list_head'] = $atts['hide_list_head']; } // Sort by. if ( isset( $atts['order_by'] ) ) { $_GET['filters'] = array( 'order_by' => $atts['order_by'] ); } // parent post. if ( isset( $atts['post_parent'] ) ) { set_query_var( 'post_parent', $atts['post_parent'] ); } } }
Expand full source code Collapse full source code View on GitHub: includes/shortcode-basepage.php:20
Add your comment