Добрый день!
Написал плагин в котором с помощью шорт-кода нужно вывести портфолио.
Вот код:
<?php
/*
Plugin Name: WOLF Sites Portfolio
Description: Sites Portfolio
Version: 0.1 beta
Author: Sokhan Ihor
*/
add_action('init', 'register_wsp_type_site'); // регистрация типа записи Сайты
/*Добавлем новый тип записи в WP*/
function register_wsp_type_site () {
$labels = array(
'name' => 'Сайт',
'singular_name' => 'Сайт',
'add_new' => 'Добавить Сайт',
'add_new_item' => 'Добавить новый Сайт',
'edit_item' => 'Редактировать Сайт',
'new_item' => 'Новый Сайт',
'all_items' => 'Сайты',
'view_item' => 'Просмотр Сайта на сайте',
'search_items' => 'Искать Сайт',
'not_found' => 'Сайт не найдено.',
'not_found_in_trash' => 'В корзине нет Сайтов.',
'menu_name' => 'Сайты'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_ui' => true,
'has_archive' => true,
'menu_icon' => 'dashicons-admin-site',
'menu_position' => 20,
'supports' => array( 'title', 'editor', 'thumbnail'),
'publicly_queryable' =>true
);
register_post_type('wsp_site', $args);
}
add_action('add_meta_boxes', 'wsp_url_site', 1); // регистрация дополнительного поля записей "Адрес сайта" и позиция
/*Добавляем произвольное поля для Site*/
function wsp_url_site() {
add_meta_box( 'wsp_url_site', 'Детали сайта', 'wsp_fields', 'wsp_site', 'normal', 'high' );
}
function wsp_fields( $post ){
?>
<p>
<label>Введите URL-адрес сайта:
<input type="text" name="extra[wsp_url_site]" value="<?php echo get_post_meta($post->ID, 'wsp_url_site', 1); ?>" style="width:50%" />
</label>
</p>
<input type="hidden" name="wsp_url_site" value="<?php echo wp_create_nonce(__FILE__); ?>" />
<p>
<label>Позиция вывода<br>(Не работает при случайном отображении):</br>
<input type="text" name="extra[wsp_weight]" value="<?php echo get_post_meta($post->ID, 'wsp_weight', 1); ?>" style="width:50%" />
</label>
</p>
<input type="hidden" name="wsp_weight" value="<?php echo wp_create_nonce(__FILE__); ?>" />
<?php
}
add_action('save_post', 'wsp_extra_fields_update', 0);
/* Сохраняем данные, при сохранении поста */
function wsp_extra_fields_update( $post_id ){
if (get_post_type( $post_id ) == "wsp_site") {
if ( !wp_verify_nonce($_POST['wsp_url_site'], __FILE__) ) return false;
if ( !wp_verify_nonce($_POST['wsp_weight'], __FILE__) ) return false;
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return false;
if ( !current_user_can('edit_post', $post_id) ) return false;
if( !isset($_POST['extra']) ) return false;
$_POST['extra'] = array_map('trim', $_POST['extra']);
foreach( $_POST['extra'] as $key=>$value ){
if( empty($value) ){
delete_post_meta($post_id, $key);
continue;
}
update_post_meta($post_id, $key, $value);
}
return $post_id;
}
}
add_action( 'init', 'register_wsp_portfolio', 0 ); // регистрация портфолио
/*Добавляет портфолио*/
function register_wsp_portfolio(){
$labels = array(
'name' => _x( 'Портфолио', 'taxonomy general name' ),
'singular_name' => _x( 'Портфолио', 'taxonomy singular name' ),
'search_items' => __( 'Искать Портфолио' ),
'popular_items' => __( 'Популярные Портфолио' ),
'all_items' => __( 'Все Портфолио' ),
'parent_item' => null,
'parent_item_colon' => null,
'edit_item' => __( 'Изменить портфолио' ),
'update_item' => __( 'Обновить Портфолио' ),
'add_new_item' => __( 'Добавить Новое Портфолио' ),
'new_item_name' => __( 'Имя нового Портфолио' ),
'separate_items_with_commas' => __( 'Separate writers with commas' ),
'add_or_remove_items' => __( 'Добавить или удалить Портфолио' ),
'choose_from_most_used' => __( 'Выбрать из популярных' ),
'menu_name' => __( 'Портфолио' ),
);
register_taxonomy('portfolio', 'wsp_site',array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'portfolio' ),
));
}
// Поля при добавлении элемента таксономии
add_action("portfolio_add_form_fields", 'add_portfolio_fields');
// Поля при редактировании элемента таксономии
add_action("portfolio_edit_form_fields", 'edit_portfolio_fields');
// Сохранение при добавлении элемента таксономии
add_action("create_portfolio", 'save_portfolio_meta');
// Сохранение при редактировании элемента таксономии
add_action("edited_portfolio", 'save_portfolio_meta');
/*Добавление поля количество столбцов и варианты вывода в портфолио*/
function add_portfolio_fields($taxonomy_slug) {
?>
<div class="form-field">
<label for="tag-count">Количество столбцов</label>
<select name="extra[count]" id="tag-count">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<p>Выберите количество для отображение на странице</p>
</div>
<div class="form-field">
<label for="tag-rand">Рандомное отображение</label>
<select name="extra[rand]" id="tag-rand">
<option value="0">Отображать случайным образом</option>
<option value="1">Отображать с учетом позиции сайта</option>
</select>
<p>Рандомное отображение сайтов</p>
</div>
<?php
}
function edit_portfolio_fields( $term ) {
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1">Количество столбцов</label></th>
<td>
<select name="extra[count]" id="tag-count">
<?php for ($i = 1; $i < 5; $i++) {?>
<option value="<?php echo $i; ?>" <?php if($i == (get_term_meta( $term->term_id, 'count', 1 ))) {?>selected="selected"<?php } ?>><?php echo $i;?></option>
<?php }?>
</select>
<span class="rand">Выберите количество для отображение на странице. Сейчас - <?php echo get_term_meta( $term->term_id, 'count', 1 ) ?></span>
</td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1">Рандомное отображение</label></th>
<td>
<select name="extra[rand]" id="tag-rand">
<option value="0" <?php if (0 == get_term_meta( $term->term_id, 'rand', 1 )) { ?>selected="selected"<?php } ?>>Отображать случайным образом</option>
<option value="1" <?php if (1 == get_term_meta( $term->term_id, 'rand', 1 )) { ?>selected="selected"<?php } ?>>Отображать с учетом позиции сайта</option>
</select>
</td>
</tr>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1">Шорт-код:</label></th>
<td>
<label><strong>[wsp id_port=<?php echo $term->term_id ?>]</strong></label>
</td>
</tr>
<?php
}
function save_portfolio_meta( $term_id ) {
if ( ! isset($_POST['extra']) )
return;
$extra = array_map('trim', $_POST['extra']);
foreach( $extra as $key => $value ){
if( empty($value) ){
delete_term_meta( $term_id, $key );
continue;
}
update_term_meta( $term_id, $key, $value );
}
return $term_id;
}
add_shortcode ('wsp', 'wsp_shortcode'); // добавление шоркода
/*Функция вывода контента через ShordCode "wsp" в зависимости от выбраных параметров*/
function wsp_shortcode ($params, $content = null){
extract( shortcode_atts( array(
'id_port' => '',
'port' => '',
'count' => '',
'orderby' => ''
), $params ) );
$args = array(
'post_type' => 'wsp_site',
'portfolio' => $port,
'numberposts' => $count,
'tax_query' => array(
array(
'taxonomy' => 'portfolio',
'field' => 'term_id',
'terms' => $id_port,),),
);
$sites = get_posts ($args);
//print_r ($sites);
foreach ($sites as $post) :
setup_postdata($post);
?>
<h2 class="entry-title"><?php the_title(); ?></h2>
<?php endforeach;
}
?>
Выводит нужное количество заголовков, но проблема в том что выводит заголовок страницы на которой использован шорт-коди, а не название нужной мне записи. Как исправить?