| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962 |
- <?php
- if ( ! defined( 'ABSPATH' ) ) {
- die( '-1' );
- }
- /**
- * @param $settings
- * @param $value
- *
- * @return string
- * @since 4.2
- */
- function vc_loop_form_field( $settings, $value ) {
- $query_builder = new VcLoopSettings( $value );
- $params = $query_builder->getContent();
- $loop_info = '';
- $parsed_value = array();
- if ( is_array( $params ) ) {
- foreach ( $params as $key => $param ) {
- $param_value_render = vc_loop_get_value( $param );
- if ( ! empty( $param_value_render ) ) {
- $parsed_value[] = $key . ':' . ( is_array( $param['value'] ) ? implode( ',', $param['value'] ) : $param['value'] );
- $loop_info .= ' <b>' . $query_builder->getLabel( $key ) . '</b>: ' . $param_value_render . ';';
- }
- }
- }
- if ( ! isset( $settings['settings'] ) ) {
- $settings['settings'] = array();
- }
- return '<div class="vc_loop">' . '<input name="' . esc_attr( $settings['param_name'] ) . '" class="wpb_vc_param_value ' . esc_attr( $settings['param_name'] . ' ' . $settings['type'] ) . '_field" type="hidden" value="' . esc_attr( join( '|', $parsed_value ) ) . '"/>' . '<a href="javascript:;" class="button vc_loop-build ' . esc_attr( $settings['param_name'] ) . '_button" data-settings="' . rawurlencode( wp_json_encode( $settings['settings'] ) ) . '">' . esc_html__( 'Build query', 'js_composer' ) . '</a>' . '<div class="vc_loop-info">' . $loop_info . '</div>' . '</div>';
- }
- /**
- * @param $param
- *
- * @return string
- * @since 4.2
- */
- function vc_loop_get_value( $param ) {
- $value = array();
- $selected_values = (array) $param['value'];
- if ( isset( $param['options'] ) && is_array( $param['options'] ) ) {
- foreach ( $param['options'] as $option ) {
- if ( is_array( $option ) && isset( $option['value'] ) ) {
- if ( in_array( ( ( '-' === $option['action'] ? '-' : '' ) . $option['value'] ), $selected_values, true ) ) {
- $value[] = $option['action'] . $option['name'];
- }
- } elseif ( is_array( $option ) && isset( $option[0] ) ) {
- if ( in_array( $option[0], $selected_values, true ) ) {
- $value[] = $option[1];
- }
- } elseif ( in_array( $option, $selected_values, true ) ) {
- $value[] = $option;
- }
- }
- } else {
- $value[] = $param['value'];
- }
- return implode( ', ', $value );
- }
- /**
- * Parses loop settings and creates WP_Query according to manual
- * @since 4.2
- * @link http://codex.wordpress.org/Class_Reference/WP_Query
- */
- class VcLoopQueryBuilder {
- /**
- * @since 4.2
- * @var array
- */
- protected $args = array(
- 'post_status' => 'publish',
- // show only published posts #1098
- );
- /**
- * @param $data
- * @since 4.2
- *
- */
- public function __construct( $data ) {
- foreach ( $data as $key => $value ) {
- $method = 'parse_' . $key;
- if ( method_exists( $this, $method ) ) {
- $this->$method( $value );
- }
- }
- }
- /**
- * Pages count
- * @param $value
- * @since 4.2
- *
- */
- protected function parse_size( $value ) {
- $this->args['posts_per_page'] = 'All' === $value ? - 1 : (int) $value;
- }
- /**
- * Sorting field
- * @param $value
- * @since 4.2
- *
- */
- protected function parse_order_by( $value ) {
- $this->args['orderby'] = $value;
- }
- /**
- * Sorting order
- * @param $value
- * @since 4.2
- *
- */
- protected function parse_order( $value ) {
- $this->args['order'] = $value;
- }
- /**
- * By post types
- * @param $value
- * @since 4.2
- *
- */
- protected function parse_post_type( $value ) {
- $this->args['post_type'] = $this->stringToArray( $value );
- }
- /**
- * By author
- * @param $value
- * @since 4.2
- *
- */
- protected function parse_authors( $value ) {
- $this->args['author'] = $value;
- }
- /**
- * By categories
- * @param $value
- * @since 4.2
- *
- */
- protected function parse_categories( $value ) {
- $this->args['cat'] = $value;
- }
- /**
- * By taxonomies
- * @param $value
- * @since 4.2
- *
- */
- protected function parse_tax_query( $value ) {
- $terms = $this->stringToArray( $value );
- if ( empty( $this->args['tax_query'] ) ) {
- $this->args['tax_query'] = array( 'relation' => 'AND' );
- }
- $negative_term_list = array();
- foreach ( $terms as $term ) {
- if ( (int) $term < 0 ) {
- $negative_term_list[] = abs( $term );
- }
- }
- $not_in = array();
- $in = array();
- $terms = get_terms( VcLoopSettings::getTaxonomies(), array( 'include' => array_map( 'abs', $terms ) ) );
- foreach ( $terms as $t ) {
- if ( in_array( (int) $t->term_id, $negative_term_list, true ) ) {
- $not_in[ $t->taxonomy ][] = $t->term_id;
- } else {
- $in[ $t->taxonomy ][] = $t->term_id;
- }
- }
- foreach ( $in as $taxonomy => $terms ) {
- $this->args['tax_query'][] = array(
- 'field' => 'term_id',
- 'taxonomy' => $taxonomy,
- 'terms' => $terms,
- 'operator' => 'IN',
- );
- }
- foreach ( $not_in as $taxonomy => $terms ) {
- $this->args['tax_query'][] = array(
- 'field' => 'term_id',
- 'taxonomy' => $taxonomy,
- 'terms' => $terms,
- 'operator' => 'NOT IN',
- );
- }
- }
- /**
- * By tags ids
- * @param $value
- * @since 4.2
- *
- */
- protected function parse_tags( $value ) {
- $in = $not_in = array();
- $tags_ids = $this->stringToArray( $value );
- foreach ( $tags_ids as $tag ) {
- $tag = (int) $tag;
- if ( $tag < 0 ) {
- $not_in[] = abs( $tag );
- } else {
- $in[] = $tag;
- }
- }
- $this->args['tag__in'] = $in;
- $this->args['tag__not_in'] = $not_in;
- }
- /**
- * By posts ids
- * @param $value
- * @since 4.2
- *
- */
- protected function parse_by_id( $value ) {
- $in = $not_in = array();
- $ids = $this->stringToArray( $value );
- foreach ( $ids as $id ) {
- $id = (int) $id;
- if ( $id < 0 ) {
- $not_in[] = abs( $id );
- } else {
- $in[] = $id;
- }
- }
- $this->args['post__in'] = $in;
- $this->args['post__not_in'] = $not_in;
- }
- /**
- * @param $id
- * @since 4.2
- *
- */
- public function excludeId( $id ) {
- if ( ! isset( $this->args['post__not_in'] ) ) {
- $this->args['post__not_in'] = array();
- }
- if ( is_array( $id ) ) {
- $this->args['post__not_in'] = array_merge( $this->args['post__not_in'], $id );
- } else {
- $this->args['post__not_in'][] = $id;
- }
- }
- /**
- * Converts string to array. Filters empty arrays values
- * @param $value
- *
- * @return array
- * @since 4.2
- *
- */
- protected function stringToArray( $value ) {
- $valid_values = array();
- $list = preg_split( '/\,[\s]*/', $value );
- foreach ( $list as $v ) {
- if ( strlen( $v ) > 0 ) {
- $valid_values[] = $v;
- }
- }
- return $valid_values;
- }
- /**
- * @return array
- */
- public function build() {
- return array(
- $this->args,
- new WP_Query( $this->args ),
- );
- }
- }
- /**
- * Class VcLoopSettings
- * @since 4.2
- */
- class VcLoopSettings {
- // Available parts of loop for WP_Query object.
- /**
- * @since 4.2
- * @var array
- */
- protected $content = array();
- /**
- * @since 4.2
- * @var array
- */
- protected $parts;
- /**
- * @since 4.2
- * @var array
- */
- protected $query_parts = array(
- 'size',
- 'order_by',
- 'order',
- 'post_type',
- 'authors',
- 'categories',
- 'tags',
- 'tax_query',
- 'by_id',
- );
- public $settings = array();
- /**
- * @param $value
- * @param array $settings
- * @since 4.2
- *
- */
- public function __construct( $value, $settings = array() ) {
- $this->parts = array(
- 'size' => esc_html__( 'Post count', 'js_composer' ),
- 'order_by' => esc_html__( 'Order by', 'js_composer' ),
- 'order' => esc_html__( 'Sort order', 'js_composer' ),
- 'post_type' => esc_html__( 'Post types', 'js_composer' ),
- 'authors' => esc_html__( 'Author', 'js_composer' ),
- 'categories' => esc_html__( 'Categories', 'js_composer' ),
- 'tags' => esc_html__( 'Tags', 'js_composer' ),
- 'tax_query' => esc_html__( 'Taxonomies', 'js_composer' ),
- 'by_id' => esc_html__( 'Individual posts/pages', 'js_composer' ),
- );
- $this->settings = $settings;
- // Parse loop string
- $data = $this->parseData( $value );
- foreach ( $this->query_parts as $part ) {
- $value = isset( $data[ $part ] ) ? $data[ $part ] : '';
- $locked = 'true' === $this->getSettings( $part, 'locked' );
- // Predefined value check.
- if ( ! is_null( $this->getSettings( $part, 'value' ) ) && $this->replaceLockedValue( $part ) && ( true === $locked || 0 === strlen( (string) $value ) ) ) {
- $value = $this->settings[ $part ]['value'];
- } elseif ( ! is_null( $this->getSettings( $part, 'value' ) ) && ! $this->replaceLockedValue( $part ) && ( true === $locked || 0 === strlen( (string) $value ) ) ) {
- $value = implode( ',', array_unique( explode( ',', $value . ',' . $this->settings[ $part ]['value'] ) ) );
- }
- // Find custom method for parsing
- if ( method_exists( $this, 'parse_' . $part ) ) {
- $method = 'parse_' . $part;
- $this->content[ $part ] = $this->$method( $value );
- } else {
- $this->content[ $part ] = $this->parseString( $value );
- }
- // Set locked if value is locked by settings
- if ( $locked ) {
- $this->content[ $part ]['locked'] = true;
- }
- if ( 'true' === $this->getSettings( $part, 'hidden' ) ) {
- $this->content[ $part ]['hidden'] = true;
- }
- }
- }
- /**
- * @param $part
- *
- * @return bool
- * @since 4.2
- */
- protected function replaceLockedValue( $part ) {
- return in_array( $part, array(
- 'size',
- 'order_by',
- 'order',
- ), true );
- }
- /**
- * @param $key
- *
- * @return mixed
- * @since 4.2
- */
- public function getLabel( $key ) {
- return isset( $this->parts[ $key ] ) ? $this->parts[ $key ] : $key;
- }
- /**
- * @param $part
- * @param $name
- *
- * @return null
- * @since 4.2
- */
- public function getSettings( $part, $name ) {
- $settings_exists = isset( $this->settings[ $part ] ) && is_array( $this->settings[ $part ] );
- return $settings_exists && isset( $this->settings[ $part ][ $name ] ) ? $this->settings[ $part ][ $name ] : null;
- }
- /**
- * @param $value
- *
- * @return array
- * @since 4.2
- */
- public function parseString( $value ) {
- return array( 'value' => $value );
- }
- /**
- * @param $value
- * @param array $options
- *
- * @return array
- * @since 4.2
- */
- protected function parseDropDown( $value, $options = array() ) {
- return array(
- 'value' => $value,
- 'options' => $options,
- );
- }
- /**
- * @param $value
- * @param array $options
- *
- * @return array
- * @since 4.2
- */
- protected function parseMultiSelect( $value, $options = array() ) {
- return array(
- 'value' => explode( ',', trim( $value, ',' ) ),
- 'options' => $options,
- );
- }
- /**
- * @param $value
- *
- * @return array
- * @since 4.2
- */
- public function parse_order_by( $value ) {
- return $this->parseDropDown( $value, array(
- array(
- 'date',
- esc_html__( 'Date', 'js_composer' ),
- ),
- 'ID',
- array(
- 'author',
- esc_html__( 'Author', 'js_composer' ),
- ),
- array(
- 'title',
- esc_html__( 'Title', 'js_composer' ),
- ),
- array(
- 'modified',
- esc_html__( 'Modified', 'js_composer' ),
- ),
- array(
- 'rand',
- esc_html__( 'Random', 'js_composer' ),
- ),
- array(
- 'comment_count',
- esc_html__( 'Comment count', 'js_composer' ),
- ),
- array(
- 'menu_order',
- esc_html__( 'Menu order', 'js_composer' ),
- ),
- ) );
- }
- /**
- * @param $value
- *
- * @return array
- * @since 4.2
- */
- public function parse_order( $value ) {
- return $this->parseDropDown( $value, array(
- array(
- 'ASC',
- esc_html__( 'Ascending', 'js_composer' ),
- ),
- array(
- 'DESC',
- esc_html__( 'Descending', 'js_composer' ),
- ),
- ) );
- }
- /**
- * @param $value
- *
- * @return array
- * @since 4.2
- */
- public function parse_post_type( $value ) {
- $options = array();
- $args = array(
- 'public' => true,
- );
- $post_types = get_post_types( $args );
- foreach ( $post_types as $post_type ) {
- if ( 'attachment' !== $post_type ) {
- $options[] = $post_type;
- }
- }
- return $this->parseMultiSelect( $value, $options );
- }
- /**
- * @param $value
- *
- * @return array
- * @since 4.2
- */
- public function parse_authors( $value ) {
- $options = $not_in = array();
- if ( empty( $value ) ) {
- return $this->parseMultiSelect( $value, $options );
- }
- $list = explode( ',', $value );
- foreach ( $list as $id ) {
- if ( (int) $id < 0 ) {
- $not_in[] = abs( $id );
- }
- }
- $users = get_users( array( 'include' => array_map( 'abs', $list ) ) );
- foreach ( $users as $user ) {
- $options[] = array(
- 'value' => (string) $user->ID,
- 'name' => $user->data->user_nicename,
- 'action' => in_array( (int) $user->ID, $not_in, true ) ? '-' : '+',
- );
- }
- return $this->parseMultiSelect( $value, $options );
- }
- /**
- * @param $value
- *
- * @return array
- * @since 4.2
- */
- public function parse_categories( $value ) {
- $options = $not_in = array();
- if ( empty( $value ) ) {
- return $this->parseMultiSelect( $value, $options );
- }
- $list = explode( ',', $value );
- foreach ( $list as $id ) {
- if ( (int) $id < 0 ) {
- $not_in[] = abs( $id );
- }
- }
- $list = get_categories( array( 'include' => array_map( 'abs', $list ) ) );
- foreach ( $list as $obj ) {
- $options[] = array(
- 'value' => (string) $obj->cat_ID,
- 'name' => $obj->cat_name,
- 'action' => in_array( (int) $obj->cat_ID, $not_in, true ) ? '-' : '+',
- );
- }
- if ( empty( $list ) ) {
- $value = '';
- }
- return $this->parseMultiSelect( $value, $options );
- }
- /**
- * @param $value
- *
- * @return array
- * @since 4.2
- */
- public function parse_tags( $value ) {
- $options = $not_in = array();
- if ( empty( $value ) ) {
- return $this->parseMultiSelect( $value, $options );
- }
- $list = explode( ',', $value );
- foreach ( $list as $id ) {
- if ( (int) $id < 0 ) {
- $not_in[] = abs( $id );
- }
- }
- $list = get_tags( array( 'include' => array_map( 'abs', $list ) ) );
- foreach ( $list as $obj ) {
- $options[] = array(
- 'value' => (string) $obj->term_id,
- 'name' => $obj->name,
- 'action' => in_array( (int) $obj->term_id, $not_in, true ) ? '-' : '+',
- );
- }
- return $this->parseMultiSelect( $value, $options );
- }
- /**
- * @param $value
- *
- * @return array
- * @since 4.2
- */
- public function parse_tax_query( $value ) {
- $options = $not_in = array();
- if ( empty( $value ) ) {
- return $this->parseMultiSelect( $value, $options );
- }
- $list = explode( ',', $value );
- foreach ( $list as $id ) {
- if ( (int) $id < 0 ) {
- $not_in[] = abs( $id );
- }
- }
- $list = get_terms( self::getTaxonomies(), array( 'include' => array_map( 'abs', $list ) ) );
- foreach ( $list as $obj ) {
- $options[] = array(
- 'value' => (string) $obj->term_id,
- 'name' => $obj->name,
- 'action' => in_array( (int) $obj->term_id, $not_in, true ) ? '-' : '+',
- );
- }
- return $this->parseMultiSelect( $value, $options );
- }
- /**
- * @param $value
- *
- * @return array
- * @since 4.2
- */
- public function parse_by_id( $value ) {
- $options = $not_in = array();
- if ( empty( $value ) ) {
- return $this->parseMultiSelect( $value, $options );
- }
- $list = explode( ',', $value );
- foreach ( $list as $id ) {
- if ( (int) $id < 0 ) {
- $not_in[] = abs( $id );
- }
- }
- $list = get_posts( array(
- 'post_type' => 'any',
- 'include' => array_map( 'abs', $list ),
- ) );
- foreach ( $list as $obj ) {
- $options[] = array(
- 'value' => (string) $obj->ID,
- 'name' => $obj->post_title,
- 'action' => in_array( (int) $obj->ID, $not_in, true ) ? '-' : '+',
- );
- }
- return $this->parseMultiSelect( $value, $options );
- }
- /**
- * @since 4.2
- */
- public function render() {
- echo wp_json_encode( $this->content );
- }
- /**
- * @return array
- * @since 4.2
- */
- public function getContent() {
- return $this->content;
- }
- /**
- * get list of taxonomies which has no tags and categories items.
- * @return array
- * @since 4.2
- * @static
- */
- public static function getTaxonomies() {
- $taxonomy_exclude = (array) apply_filters( 'get_categories_taxonomy', 'category' );
- $taxonomy_exclude[] = 'post_tag';
- $taxonomies = array();
- foreach ( get_taxonomies() as $taxonomy ) {
- if ( ! in_array( $taxonomy, $taxonomy_exclude, true ) ) {
- $taxonomies[] = $taxonomy;
- }
- }
- return $taxonomies;
- }
- /**
- * @param $settings
- *
- * @return string
- * @since 4.2
- */
- public static function buildDefault( $settings ) {
- if ( ! isset( $settings['settings'] ) || ! is_array( $settings['settings'] ) ) {
- return '';
- }
- $value = '';
- foreach ( $settings['settings'] as $key => $val ) {
- if ( isset( $val['value'] ) ) {
- $value .= ( empty( $value ) ? '' : '|' ) . $key . ':' . $val['value'];
- }
- }
- return $value;
- }
- /**
- * @param $query
- * @param bool $exclude_id
- *
- * @return array
- * @since 4.2
- */
- public static function buildWpQuery( $query, $exclude_id = false ) {
- $data = self::parseData( $query );
- $query_builder = new VcLoopQueryBuilder( $data );
- if ( $exclude_id ) {
- $query_builder->excludeId( $exclude_id );
- }
- return $query_builder->build();
- }
- /**
- * @param $value
- *
- * @return array
- * @since 4.2
- */
- public static function parseData( $value ) {
- $data = array();
- $values_pairs = preg_split( '/\|/', $value );
- foreach ( $values_pairs as $pair ) {
- if ( ! empty( $pair ) ) {
- list( $key, $value ) = preg_split( '/\:/', $pair );
- $data[ $key ] = $value;
- }
- }
- return $data;
- }
- }
- /**
- * Suggestion list for wp_query field
- * Class VcLoopSuggestions
- * @since 4.2
- */
- class VcLoopSuggestions {
- /**
- * @since 4.2
- * @var array
- */
- protected $content = array();
- /**
- * @since 4.2
- * @var array
- */
- protected $exclude = array();
- /**
- * @since 4.2
- * @var
- */
- protected $field;
- /**
- * @param $field
- * @param $query
- * @param $exclude
- *
- * @since 4.2
- */
- public function __construct( $field, $query, $exclude ) {
- $this->exclude = explode( ',', $exclude );
- $method_name = 'get_' . preg_replace( '/_out$/', '', $field );
- if ( method_exists( $this, $method_name ) ) {
- $this->$method_name( $query );
- }
- }
- /**
- * @param $query
- *
- * @since 4.2
- */
- public function get_authors( $query ) {
- $args = ! empty( $query ) ? array(
- 'search' => '*' . $query . '*',
- 'search_columns' => array( 'user_nicename' ),
- ) : array();
- if ( ! empty( $this->exclude ) ) {
- $args['exclude'] = $this->exclude;
- }
- $users = get_users( $args );
- foreach ( $users as $user ) {
- $this->content[] = array(
- 'value' => (string) $user->ID,
- 'name' => (string) $user->data->user_nicename,
- );
- }
- }
- /**
- * @param $query
- *
- * @since 4.2
- */
- public function get_categories( $query ) {
- $args = ! empty( $query ) ? array( 'search' => $query ) : array();
- if ( ! empty( $this->exclude ) ) {
- $args['exclude'] = $this->exclude;
- }
- $categories = get_categories( $args );
- foreach ( $categories as $cat ) {
- $this->content[] = array(
- 'value' => (string) $cat->cat_ID,
- 'name' => $cat->cat_name,
- );
- }
- }
- /**
- * @param $query
- *
- * @since 4.2
- */
- public function get_tags( $query ) {
- $args = ! empty( $query ) ? array( 'search' => $query ) : array();
- if ( ! empty( $this->exclude ) ) {
- $args['exclude'] = $this->exclude;
- }
- $tags = get_tags( $args );
- foreach ( $tags as $tag ) {
- $this->content[] = array(
- 'value' => (string) $tag->term_id,
- 'name' => $tag->name,
- );
- }
- }
- /**
- * @param $query
- *
- * @since 4.2
- */
- public function get_tax_query( $query ) {
- $args = ! empty( $query ) ? array( 'search' => $query ) : array();
- if ( ! empty( $this->exclude ) ) {
- $args['exclude'] = $this->exclude;
- }
- $tags = get_terms( VcLoopSettings::getTaxonomies(), $args );
- foreach ( $tags as $tag ) {
- $this->content[] = array(
- 'value' => $tag->term_id,
- 'name' => $tag->name . ' (' . $tag->taxonomy . ')',
- );
- }
- }
- /**
- * @param $query
- *
- * @since 4.2
- */
- public function get_by_id( $query ) {
- $args = ! empty( $query ) ? array(
- 's' => $query,
- 'post_type' => 'any',
- ) : array( 'post_type' => 'any' );
- if ( ! empty( $this->exclude ) ) {
- $args['exclude'] = $this->exclude;
- }
- $args['ignore_sticky_posts'] = true;
- $posts = get_posts( $args );
- foreach ( $posts as $post ) {
- $this->content[] = array(
- 'value' => $post->ID,
- 'name' => $post->post_title,
- );
- }
- }
- /**
- * @since 4.2
- */
- public function render() {
- echo wp_json_encode( $this->content );
- }
- }
- /**
- * Build WP_Query object from query string.
- * String created by loop controllers
- *
- * @param $query
- * @param bool $exclude_id
- *
- * @return array
- * @since 4.2
- */
- function vc_build_loop_query( $query, $exclude_id = false ) {
- return VcLoopSettings::buildWpQuery( $query, $exclude_id );
- }
- /**
- * @since 4.2
- */
- function vc_get_loop_suggestion() {
- vc_user_access()->checkAdminNonce()->validateDie()->wpAny( 'edit_posts', 'edit_pages' )->validateDie();
- $loop_suggestions = new VcLoopSuggestions( vc_post_param( 'field' ), vc_post_param( 'query' ), vc_post_param( 'exclude' ) );
- $loop_suggestions->render();
- die();
- }
- /**
- * @since 4.2
- */
- function vc_get_loop_settings_json() {
- vc_user_access()->checkAdminNonce()->validateDie()->wpAny( 'edit_posts', 'edit_pages' )->validateDie();
- $loop_settings = new VcLoopSettings( vc_post_param( 'value' ), vc_post_param( 'settings' ) );
- $loop_settings->render();
- die();
- }
- add_action( 'wp_ajax_wpb_get_loop_suggestion', 'vc_get_loop_suggestion' );
- add_action( 'wp_ajax_wpb_get_loop_settings', 'vc_get_loop_settings_json' );
- /**
- * @since 4.2
- */
- function vc_loop_include_templates() {
- require_once vc_path_dir( 'TEMPLATES_DIR', 'params/loop/templates.html' );
- }
- add_action( 'admin_footer', 'vc_loop_include_templates' );
|