Как сделать шорткод для списка сообщений категории с сортировкой на основе значения настраиваемого поля

Я только что переключился на новую тему и не хочу переопределять файлы шаблонов. В моей старой теме у меня был собственный файл sidebar.php со следующим кодом над частью динамического виджета. Для новой темы я хочу сделать это с помощью шорткода и просто использовать текстовый виджет, чтобы разместить его на боковой панели. Как я могу преобразовать это в шорткод?

<aside id = "my-listings" class = "widget widget-my-listings">
    <h2 class = "widget-title">Featured Listings</h2>
    <ul>
        <?php
            global $post;
            $listings = get_posts('category=3&numberposts=-1&orderby=meta_value&meta_key=price&order=DESC');
            foreach($listings as $post) :
        ?>
        <li><a href = "<?php the_permalink(); ?>"><?php
        if (get_post_meta($post->ID, "alternate_title", true)) {
            echo get_post_meta($post->ID, "alternate_title", true);
        } else {
            the_title();
        } ?></a></li>
        <?php endforeach; ?>
    </ul>
</aside>
Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
0
0
245
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте этот шорткод.

[mylistingswidget]

Это место кода в вашем functions.php

<?php

add_shortcode( 'mylistingswidget', 'my_listings_widget' );

function my_listings_widget( $atts ) {
    ob_start();
    ?>
    <aside id = "my-listings" class = "widget widget-my-listings">
        <h2 class = "widget-title">Featured Listings</h2>
        <ul>
            <?php
            global $post;
            $listings = get_posts('category=3&numberposts=-1&orderby=meta_value&meta_key=price&order=DESC');
            foreach($listings as $post) :
                ?>
                <li><a href = "<?php the_permalink(); ?>"><?php
                        if (get_post_meta($post->ID, "alternate_title", true)) {
                            echo get_post_meta($post->ID, "alternate_title", true);
                        } else {
                            the_title();
                        } ?></a></li>
            <?php endforeach; ?>
        </ul>
    </aside>
<?php
    return ob_get_clean();
}

Это работает как шарм. Абсолютно идеально. Спасибо!!!

draney 26.11.2022 15:09

Другие вопросы по теме