<?php
$args = array(
'meta_key' => 'who',
'meta_value' => 'Инструктор',
'posts_per_page' => '-1'
);
$meta_posts = get_posts( $args );
$meta_posts_count = count( $meta_posts );
wp_reset_query();
?>
<?php print_r($meta_posts_count); ?>
<?php
/*
Plugin Name: Shortcode Pagination for WooCommerce
Plugin URI: http://www.jckemp.com
Description: Adds pagination to WooCommerce Product Category Shortcode
Version: 1.0.0
Author: James Kemp
Author URI: http://www.jckemp.com
Text Domain: jck-wsp
*/
defined('JCK_WSP_PATH') or define('JCK_WSP_PATH', plugin_dir_path( __FILE__ ));
defined('JCK_WSP_URL') or define('JCK_WSP_URL', plugin_dir_url( __FILE__ ));
class JCK_WSP {
public $name = 'WooCommerce Shortcode Pagination';
public $shortname = 'Shortcode Pagination';
public $slug = 'jck-wsp';
public $version = "1.0.0";
public $plugin_path;
public $plugin_url;
/**
* Construct the plugin
*/
public function __construct() {
$this->set_constants();
add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ) );
add_action( 'init', array( $this, 'initiate_hook' ) );
}
/**
* Set up plugin constants
*/
public function set_constants() {
$this->plugin_path = JCK_WSP_PATH;
$this->plugin_url = JCK_WSP_URL;
}
/**
* Run on Plugins Loaded hook
*/
public function plugins_loaded() {
$this->textdomain();
}
/**
* Run after the current user is set (http://codex.wordpress.org/Plugin_API/Action_Reference)
*/
public function initiate_hook() {
if( !is_admin() ) {
add_action( 'pre_get_posts', array( $this, 'add_paged_param' ) );
add_action( 'loop_end', array( $this, 'loop_end' ) );
add_action( 'woocommerce_after_template_part', array( $this, 'add_pagination' ) );
}
}
/**
* Load plugin textdomain
*/
public function textdomain() {
load_plugin_textdomain( 'jck-wsp', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
/**
* Frontend: Add the paged param to the shortcode product query
*
* @param obj $query WP_Query
*/
public function add_paged_param( $query ) {
global $woocommerce_loop;
// Get paged from main query only
// ! frontpage missing the post_type
$post_type = ( isset( $query->query['post_type'] ) ) ? $query->query['post_type'] : false;
if ( $query->is_main_query() && ( $post_type == 'product' || !$post_type ) ) {
if ( isset($query->query['paged']) ){
$woocommerce_loop['paged'] = $query->query['paged'];
}
}
if ( ! $query->is_post_type_archive || $post_type !== 'product' ){
return;
}
$query->is_paged = true;
$query->query['paged'] = $woocommerce_loop['paged'];
$query->query_vars['paged'] = $woocommerce_loop['paged'];
}
/**
* Frontend: Add query params to enable the pagination
*
* @param obj $query WP_Query
*/
public function loop_end( $query ) {
if ( ! $query->is_post_type_archive || $query->query['post_type'] !== 'product' ){
return;
}
// Cache data for pagination
global $woocommerce_loop;
$paged = ( isset( $woocommerce_loop['paged'] ) ) ? $woocommerce_loop['paged'] : 1;
$woocommerce_loop['pagination']['paged'] = $paged;
$woocommerce_loop['pagination']['found_posts'] = $query->found_posts;
$woocommerce_loop['pagination']['max_num_pages'] = $query->max_num_pages;
$woocommerce_loop['pagination']['post_count'] = $query->post_count;
$woocommerce_loop['pagination']['current_post'] = $query->current_post;
}
/**
* Frontend: Add pagination to the shortcode after loop end
*
* @param str $template_name
*/
public function add_pagination( $template_name ) {
if ( ! ( $template_name === 'loop/loop-end.php' && ( is_page() || is_single() ) ) ){
return;
}
global $wp_query, $woocommerce_loop;
if ( ! isset( $woocommerce_loop['pagination'] ) ){
return;
}
$wp_query->query_vars['paged'] = $woocommerce_loop['pagination']['paged'];
$wp_query->query['paged'] = $woocommerce_loop['pagination']['paged'];
$wp_query->max_num_pages = $woocommerce_loop['pagination']['max_num_pages'];
$wp_query->found_posts = $woocommerce_loop['pagination']['found_posts'];
$wp_query->post_count = $woocommerce_loop['pagination']['post_count'];
$wp_query->current_post = $woocommerce_loop['pagination']['current_post'];
// Custom pagination function or default woocommerce_pagination()
woocommerce_pagination();
}
}
$jck_wsp = new JCK_WSP();
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery(".page-numbers").click(function(){
var idblock = jQuery("div.vc_tta-panel.vc_active").attr("id");
// jQuery('a.page-numbers').attr('href', jQuery(this).attr('href') + '/#' + idblock);
var href = jQuery('a.page-numbers').attr('href');
jQuery('a.page-numbers').attr('href',href + '/#' +idblock );
});
});
</script>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery("ul.vc_tta-tabs-list").click(function(){
var idblock = jQuery("div.vc_tta-panel.vc_active").attr("id");
alert(idblock);
jQuery.cookie("test", idblock);
});
});
</script>
<nav class="woocommerce-pagination">
<?php
$idblock=$_COOKIE['test'];
echo paginate_links( apply_filters( 'woocommerce_pagination_args', array(
'base' => esc_url_raw( str_replace( 999999999, '%#%', remove_query_arg( 'add-to-cart', get_pagenum_link( 999999999, false ) ) ) ),
'format' => '',
'add_args' => false,
'current' => max( 1, get_query_var( 'paged' ) ),
'total' => $wp_query->max_num_pages,
'prev_text' => '←',
'next_text' => '→',
'type' => 'list',
'end_size' => 3,
'mid_size' => 3,
'add_fragment' => "#$idblock"
) ) );
?>
</nav>
html,
body {
height: 100% !important;
}
.container {
position: relative !important;
min-height: 100% !important;
}
main {
padding-bottom: 50px !important;
}
#footer {
position: absolute !important;
left: 0 !important;
bottom: 0 !important;
width: 100% !important;
height: 55px !important;
}
var myCollection = new ymaps.GeoObjectCollection();
myCollection.options.set({
iconImageHref: 'yandex.st/lego/_/X31pO5JJJKEifJ7sfvuf3mGeD_8.png',
iconImageSize: [95, 37], // размеры картинки
iconImageOffset: [-11, -30] // смещение картинки
});
YMaps.jQuery(function () {
// Создает экземпляр карты и привязывает его к созданному контейнеру
var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
// Устанавливает начальные параметры отображения карты: центр карты и коэффициент масштабирования
map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);
// Создает стиль
var s = new YMaps.Style();
// Создает стиль значка метки
s.iconStyle = new YMaps.IconStyle();
s.iconStyle.href = "images/map.png";
// s.iconStyle.size = new YMaps.Point(140, 139);
// s.iconStyle.offset = new YMaps.Point(-140, -139);
// Создает метку
var placemark = new YMaps.Placemark(new YMaps.GeoPoint(37.505507499999915,55.743517277269156), {style: s});
var placemark2 = new YMaps.Placemark(new YMaps.GeoPoint(37.52345549999994,55.64192027765163), {style: s});
var placemark3 = new YMaps.Placemark(new YMaps.GeoPoint(37.62410349999998,55.68452827749535), {style: s});
var placemark4 = new YMaps.Placemark(new YMaps.GeoPoint(37.545419499999944,55.42569577845532), {style: s});
var placemark5 = new YMaps.Placemark(new YMaps.GeoPoint(37.540532499999934,55.654568777603394), {style: s});
// Устанавливает содержимое балуна
placemark.name = "Офис «Багратионовская»";
placemark.description = "<H1>Офис «Багратионовская»</H1><br>Багратионовский проезд, д. 7, корп. 20В,вход через правовой центр,Тел.: +7 (499) 681-21-93<br><br>";
placemark2.name = "Плов без слов";
placemark2.description = "Комендатский пр., 30";
placemark3.name = "Плов без слов";
placemark3.description = "Комендатский пр., 30"
placemark4.name = "Плов без слов";
placemark4.description = "Комендатский пр., 30"
placemark5.name = "Плов без слов";
placemark5.description = "Комендатский пр., 30"
// Создает группу меток
var group = new YMaps.GeoObjectCollection();
group.add(placemark);
group.add(placemark2);
group.add(placemark3);
group.add(placemark4);
group.add(placemark5);
// Добавляет группу меток на карту
map.addOverlay(group);
// Действия при добавлении элемента на карту
function OfficeNavigator (offices) {
this.onAddToMap = function (map, position) {
this.container = YMaps.jQuery("<ol></ol>")
this.map = map;
this.position = position || new YMaps.ControlPosition(YMaps.ControlPosition.TOP_LEFT, new YMaps.Size(10, 10));
// CSS-свойства, определяющие внешний вид элемента
this.container.css({
position: "absolute",
zIndex: YMaps.ZIndex.CONTROL,
background: '#fff',
listStyle: 'none',
padding: '10px',
margin: 0
});
// Формирует список офисов
this._generateList();
// Располагает элемент управления в верхнем правом углу карты
this.position.apply(this.container);
// Добавляет элемент управления на карту
this.container.appendTo(this.map.getContainer());
}
// Обработчик удаления элемента управления с карты
this.onRemoveFromMap = function () {
if (this.container.parent()) {
this.container.remove();
this.container = null;
}
this.map = null;
};
// Формирует выпадающий список офисов
this._generateList = function () {
var _this = this;
// Вызывает функцию-обработчик для каждого объекта
offices.forEach(function (obj) {
// Создает ссылку на объект
var li = YMaps.jQuery("<li><a href=\"#\">" + obj.description + "</li>"),
a = li.find("a");
// Создает обработчик щелчка мыши по ссылке
li.bind("click", function () {
_this.map.panTo(obj.getGeoPoint(), {
flying: 1,
callback: function () {
size: "large";
}
});
return false;
});
// Создает слушатели событий открытия и закрытия балуна объекта
YMaps.Events.observe(obj, obj.Events.BalloonOpen, function () {
a.css("text-decoration", "none");
});
YMaps.Events.observe(obj, obj.Events.BalloonClose, function () {
a.css("text-decoration", "");
});
// Добавляет ссылку на объект в общий список
li.appendTo(_this.container);
});
};
}
// Создает элемент управления "Путеводитель по офисам"
map.addControl(new OfficeNavigator(group));
// Добавляет метку на карту
/*
map.addOverlay(placemark);
map.addOverlay(placemark2);
*/
// Создает элемент масштабирования
var smallZoomControl = new YMaps.SmallZoom();
map.addControl(smallZoomControl);
})