Шорткоды - Wordpress

Я создал шорткод для постов, теперь мне нужно шорткодировать пост в посте / странице, который работает. Пример: я вставляю post2 в post1, и когда я посещаю post1, я вижу этот post2, но когда я вставляю post1 на page1, я не вижу post2

Это код, который я написал до сих пор.

<?php 
function getPostShortcode( $atts, $content = '' ) {
        extract( shortcode_atts( array(
            'id'    => '',
            'title' => ''
        ), $atts, 'post_shortcode' ) );

        if ( empty( $atts['id'] ) )
            return;

        $loop = new WP_Query( array(
            'post_type' => 'post',
            'p'         => $atts['id']
        ) );
        ob_start();
        if ( $loop->have_posts() ) {
            while ( $loop->have_posts() ) : $loop->the_post();
                            $desc  = ! empty( $atts['desc'] ) ? $atts['desc'] : get_the_content();
            ?>
                <div class = "post-single-shortcode-aka">
                    <h2><a href = "#"><?php echo $title; ?></a></h2>
                    <p><?php echo $desc; ?></p>
                </div>
           <?php 
           endwhile;
           wp_reset_postdata(); 
       } 
    return ob_get_clean();
}
add_shortcode( 'post_shortcode', 'getPostShortcode' );
?>

Трудно понять, тестировали ли вы добавление global $post; перед своим WP Query. Затем добавьте wp_reset_query в конце.

David.J 03.08.2018 10:23

Я пробовал, не помогает, ты

Armin 03.08.2018 10:35

Вы говорите, что встраивание «поста 1» на «страницу 1» не показывает «пост 1» (потому что в вашем вопросе вы говорите, что «пост 2» не отображается)?

Outsource WordPress 03.08.2018 11:49

У вас есть два сообщения и одна страница, когда я помещаю шорткод post2 в post1, а затем, когда я помещаю шорткод post1 на page1, я не вижу post2, я говорю, что шорткоды не работают более чем в 2 слоях ...

Armin 03.08.2018 11:56

четко ли отображается шорткод ([post_shortcode id = post2]) или ничего?

R. Martin 03.08.2018 12:09

Он показывает [post_shortcode id = post2], я только что нашел решение, которое работает для excpert, и то есть я могу добавить двойные скобки, но это может сбить с толку редакторов

Armin 03.08.2018 12:49

@Armin. Я не вижу ничего плохого в вашем коде. Шорткод должен работать с постом / страницей, где бы вы его ни разместили. Я только что заметил, почему вы используете атрибут шорткода title в качестве заголовка сообщения? вы можете использовать вместо него get_the_title(). Возможно, вы просто запутались, потому что не видите заголовок сообщения всякий раз, когда используете шорткод без атрибута title ex: [post_shortcode id = "2"]. Просто попробуйте заменить echo $title на get_the_title(), и вы увидите. И помните, что атрибут id должен быть идентификатором сообщения.

Paul Janubas 03.08.2018 12:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
82
1

Ответы 1

Обычной практикой было бы рекурсивно «применять» шорткоды или фильтры. то есть каждый, когда вы получаете контент публикации, вы делаете "do_shortcode".

В своей функции вы можете использовать «get_post_field», чтобы получить контент, или заголовок, или отрывок и т.д. для идентификатора сообщения. В зависимости от того, как вы хотите визуализировать вывод, вы можете использовать apply_filters или do_shortcode; и, вероятно, нет необходимости в буферизации ob.

function getPostShortcode( $atts, $content = '' ) {
  extract( shortcode_atts( array(
        'id' => '', 'title' => ''
  ), $atts, 'post_shortcode' ) );
  if ( empty( $atts['id'] ) ) return;

 // get_post_field can be used to get content, excerpt, title etc etc
  $desc = get_post_field('post_content',  $atts['id']);

  $myEmbed = '<div class = "post-single-shortcode-aka"><h2><a href = "#">' . $title .'</a></h2><p>';
  $myEmbed .= apply_filters('the_content',$desc) . '</p></div>';
  // *** OR *** do_shortcode($desc) . '</p></div>';
  return $myEmbed;
}
add_shortcode( 'post_shortcode', 'getPostShortcode' );

Редактировать: добавил отсутствующий </div> в приведенный выше код.

Я проверил код и: Если сообщение A содержит [post_shortcode id=1234 title = "Embed 1"], то "Сообщение B" (id 1234 ") встроено в сообщение A. Если сообщение B содержит [post_shortcode id=3456 title = "Embed 2"], то" Post C "(id 3456) также встроено в ОБА Сообщение B И сообщение А.

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