Информация Практичные WordPress шорткоды

fuxilazo

Создатель
Регистрация
2 Ноя 2016
Сообщения
29
Реакции
6
Данный шорткод перенаправляет PDF на GoogleDocs, что намного удобнее для пользователя.

PHP:
function pdflink($attr, $content) {
return '<a class="pdf" href="http://docs.google.com/viewer?url=' . $attr['href'] . '">'.$content.'</a>';
}
add_shortcode('pdf', 'pdflink');

[pdf href="[URL]http://yoursite.com/linktoyour/file.pdf[/URL]"] Читать PDF [/pdf]

выводим похожие посты

я делаю не так, пишу просто функцию в шаблоне поста, но думаю, что многим будет полезен и этот функционал

[related_posts]


PHP:
function related_posts_shortcode( $atts ) {
extract(shortcode_atts(array(
 'limit' => '5',
), $atts));

global $wpdb, $post, $table_prefix;

if ($post->ID) {
$retval = '<ul>';
// Get tags
$tags = wp_get_post_tags($post->ID);
$tagsarray = array();
foreach ($tags as $tag) {
$tagsarray[] = $tag->term_id;
}
$tagslist = implode(',', $tagsarray);

// Do the query
$q = "SELECT p.*, count(tr.object_id) as count
FROM $wpdb->term_taxonomy AS tt, $wpdb->term_relationships AS tr, $wpdb->posts AS p WHERE tt.taxonomy ='post_tag' AND tt.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id = p.ID AND tt.term_id IN ($tagslist) AND p.ID != $post->ID
AND p.post_status = 'publish'
AND p.post_date_gmt < NOW()
GROUP BY tr.object_id
ORDER BY count DESC, p.post_date_gmt DESC
LIMIT $limit;";

$related = $wpdb->get_results($q);
if ( $related ) {
foreach($related as $r) {
$retval .= '<li><a title="'.wptexturize($r->post_title).'" href="'.get_permalink($r->ID).'">'.wptexturize($r->post_title).'</a></li>';
}
} else {
$retval .= '
<li>No related posts found</li>';
}
$retval .= '</ul>';
return $retval;
}
return;
}
add_shortcode('related_posts', 'related_posts_shortcode');
 
Последнее редактирование модератором:

fuxilazo

Создатель
Регистрация
2 Ноя 2016
Сообщения
29
Реакции
6
Вставка карты google

[google_map src="" width="" height=""]

  • src - ссылка на карту
  • width - ширина карты в px (по умолчанию 960)
  • height - высота карты в px (по умолчанию 320)

PHP:
function shortcode_googlemap($atts, $content = null) {
     extract(shortcode_atts(array(
                   "width" => '960', //ширина по умолчанию, можете изменить на свои
                   "height" => '320', //высота по умолчанию, можете изменить на свои
                   "src" => ''
     ), $atts));
    
    $content  = '<div>'; //можете здесь прописать класс элементу, чтоб легче его было стилизовать
    $content .= '<iframe src="'.$src.'&output=embed" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="'.$width.'" height="'.$height.'"></iframe>';
    $content .= '</div>';

    return $content;

}

add_shortcode("google_map", "shortcode_googlemap");

Добавляет приватные пометки в ваши записи или страницы, они будут видны только администратору.

Шорткод ниже добавляет заметки в ваши посты, видны будут только определенному уровню пользователя, в строке current_user_can('publish_posts') замените текст в скобках на любую возможность уровня пользователей, которым вы хотите предоставить доступ к таким пометкам.
  • publish_posts - видны только администраторам
  • delete_pages - видны администраторам и редакторам
  • delete_posts - видны администраторам, редакторам и авторам
полный перечень ролей пользователей и возможностей Для просмотра ссылки Войди или Зарегистрируйся

[note]Ваш текст[/note]

PHP:
function sc_note( $atts, $content = null ) {
    if ( current_user_can( 'publish_posts' ) ) {
        return '<div class="note">'.$content.'</div>'; 
   } else {
    return ''; //две одинарные кавычки
   } 
}
add_shortcode( 'note', 'sc_note' );

Защищает ваш email от копирования, что полезно при большой посещалке сайта, защита от спама

[email address="[email]you@emailcompany.com[/email]"]

PHP:
function emailbot_ssc($attr) {
    extract( shortcode_atts( array(
             'address' => '', //здесь можно указать ваш почтовый адрес по умолчанию, чтобы не указывать его постоянно в шорткоде
            ), $attr ) );

    $email  = '<a class="email_link" href="mailto:'.antispambot($attr['address']).'" title="Send Us An Email" target="_blank">';
    $email .= antispambot($attr['address']);
    $email .= '</a>';
    
   return $email;
}
add_shortcode('email', 'emailbot_ssc');

эту функцию написал сам, поэтому если найдете ошибки или же найдете более простое решение - пишите в личку, буду признателен за обратную связь

на сайте много категорий - была задача сделать так, чтоб на странице товара в сайдбаре отображались только текущие категории, остальные должны быть скрыты спойлером

шорткод [product_cats_widget] запихиваем в виджеты

PHP:
//список категорий товаров в сайдбаре
function product_cats_widget_func () {

    if (is_singular('product')) { #если страница товара
   
        $content = '<ul class="product-cats-list-widget">';

        $categories = get_the_terms(get_the_ID(),'product_cat');
   
        $exclude = ''; //две одинарные кавычки

        //запоминаем все текущие категории
        foreach ($categories as $cats) {
            $curr_cats_ids[] = $cats->term_id;
            $exclude .= $cats->term_id . ', ';
        }
       

        if ($categories) {
            foreach ($categories as $cat) {

                //выводим только род категории, дочерние выводим к каждой родительской
                if ($cat->parent == 0) {

                    $cat_link = get_term_link($cat->term_id, 'product_cat');
                    $content .= '<li class="current-cat"><a href="' . $cat_link . '">' . $cat->name . '</a>';
               
                    $cat_args = array(
                        'orderby'    => 'name',
                        'child_of'    => $cat->term_id,
                        'taxonomy' => 'product_cat',
                    );

                    $child_cats = get_terms($cat_args);

                    //выводим дочерние категории, если относится к текущему товару, то помечаем
                    if ($child_cats) {
                        $content .= '<ul>';
                        foreach ($child_cats as $child_cat) {
                            if (in_array($child_cat->term_id, $curr_cats_ids)) {
                                $class = 'class="current-cat"';
                            } else {
                                $class = '';
                            }
                            $cat_link = get_term_link($child_cat->term_id, 'product_cat');
                            $content .= '<li '.$class.'><a href="'.$cat_link.'">' . $child_cat->name . '</a></li>';
                        }
                        $content .= '</ul>';
                    }
               
                    $content .= '</li>';
                }
            }
        }

        $content .= '</ul>';
        $content .= product_cats_parent_list($exclude);

    } elseif (is_product_category()) { //если страница категории

        $content = '<ul class="product-cats-list-widget">';

        $current_cat = get_queried_object();
        $current_cat_id = $current_cat->term_id;

        //выявляем родительскую категорию, если текущая является дочерней, то определяем "верхнюю" и выводим все дочерние
        if ($current_cat->parent != 0 ) {
            $cur_cat_par_id = $current_cat->parent;
        } else {
            $cur_cat_par_id = $current_cat->term_id;
        }

        $cur_cat_par = get_term_by('id', $cur_cat_par_id, 'product_cat');
        $exclude = $cur_cat_par->term_id;

        if ($cur_cat_par->term_id == $current_cat_id) {
            $class = 'class="current-cat"';
        } else {
            $class = '';
        }

        $cat_link = get_term_link($cur_cat_par->term_id, 'product_cat');
        $content .= '<li '.$class.'><a href="' . $cat_link . '">' . $cur_cat_par->name . '</a>';
       
        $cat_args = array(
            'orderby'  => 'name',
            'child_of' => $cur_cat_par->term_id,
            'taxonomy' => 'product_cat',
        );

        $child_cats = get_terms($cat_args);

        if ($child_cats) {
            $content .= '<ul>';
            foreach ($child_cats as $child_cat) {
                if ($child_cat->term_id == $current_cat_id) {
                    $class = 'class="current-cat"';
                } else {
                    $class = '';
                }
                $cat_link = get_term_link($child_cat->term_id, 'product_cat');
                $content .= '<li '.$class.'><a href="' . $cat_link . '">' . $child_cat->name . '</a></li>';
            }
            $content .= '</ul>';
        }
   
        $content .= '</li>';
        $content .= '</ul>';

        $content .= product_cats_parent_list($exclude);

    } else {

        $content = '<ul class="product-cats-list-widget">';

        $args = array(
            'taxonomy'   => 'product_cat',
            'orderby'    => 'name',
            'order'      => 'ASC',
            'hide_empty' => true,
            'parent'     => '0',
        );

        $categories = get_terms($args);
        if ($categories) {
            foreach ($categories as $cat) {
                $cat_link = get_term_link($cat->term_id, 'product_cat');
                $content .= '<li><a href="'.$cat_link.'">' . $cat->name . '</a></li>';
            }
        }

        $content .= '</ul>';
    }

    return $content;
}
add_shortcode('product_cats_widget','product_cats_widget_func');

код самого спойлера ниже (можно использовать любое удобное вам решение, суть в скрытии контейнера <ul class="product-cats-list-widget spoiler"> (описан выше)

PHP:
//код в footer.php внизу, лучше, конечно, создать отдельный custom.js и туда все пихать
<?php 
//подключение скрипта только на страницах товара и категорий
if (is_singular('product') || is_product_category()) : ?>
<script type="text/javascript">
jQuery(document).ready(function(){
    jQuery('div.spoilerinside').hide();
    jQuery('.spoilerbar .toggle').click(function(){
        jQuery(this).parents('.textwidget').find('.spoilerinside').slideToggle('fast');
    });
});
</script>
<?php endif; ?>
 
Последнее редактирование модератором:

sexadmin

Постоялец
Регистрация
14 Апр 2016
Сообщения
73
Реакции
10
Отключаем кликабельность ссылок в комментариях (на комментатора)

Код:
/* Отключить кликабельные ссылки в комментариях*/
remove_filter('comment_text', 'make_clickable', 9);
if( !function_exists("disable_comment_author_links")){
    function disable_comment_author_links( $author_link ){
        return strip_tags( $author_link );
    }
    add_filter( 'get_comment_author_link', 'disable_comment_author_links' );

}
 
Сверху