Intereting Posts
Несколько боковых панелей для нескольких страниц Подключение пользователей и таксономии Перенаправление удаленных сообщений URL-адрес другой установки WordPress Как получить имя и значение мета-поля Как предотвратить спам-комментарии? Как я могу условно выделить таблицы стилей или сценарии в настройках настройки тем? TinyMCE не загружается в IE8 WordPress functions.php – Выполнить плагин для конкретного пользователя онлайн Использует ли аргумент «cat» в query_posts сообщения из подкатегорий, а также данные ID? Удаление родительского пула в иерархическом настраиваемом типе сообщений Это хорошая идея сделать всю тему виджетной? выберите изображение для предварительного просмотра из галереи nextgen Проводка в качестве разных пользователей Объединение обновленного сайта-разработчика с живым сайтом при правильном выполнении заказов При необходимости массив тегов

Замораживание WP_Query

Поэтому я наткнулся на ряд похожих вопросов на SO, но мое понимание wp_query и расширенного PHP ограничено. Я думаю, что get_the_ в объектах / массивах PHP и использовании функций get_the_ и get_the_ . Код находится в (эквивалент темы корней) funtions.php.

Я пытаюсь отлаживать, когда я использую var_dump и ChromePhp, но часто моя страница просто падает или зависает, когда я пытаюсь это сделать.

 function tags() { // If current post has tags if (get_the_tags()) { $post_id = get_the_id(); $posttags = get_the_tags(); // Loop for each tag the custom post has foreach($posttags as $tag) { $tag_name = ($tag->slug); // Search for posts with the same tag, // is a custom type and don't return // the current post $args = array( 'post_type' => 'custom_post', 'tag' => $tag_name, 'post__not_in' => array( $post_id ) ); $query = new WP_Query( $args ); // Make sure we got results if( $query->have_posts() ) { // Loop through each returned post while ( $query->have_posts() ) { $query->the_post(); // Returns null ...other things generally lock up the page... $example = ($query->posts[0]); // Crashes the server } } wp_reset_postdata(); } } } add_shortcode('shortcodetag', 'tags'); 

Так что, похоже, это работает нормально, я могу вернуть правильные сообщения на основе текущего тега. Проблема заключается в простом доступе к информации в этих возвращенных сообщениях. Заключительный цикл while просто перемалывает страницу до 30 секунд, прежде чем я получу ошибку сервера.

Solutions Collecting From Web of "Замораживание WP_Query"

Из обсуждения в комментариях к вашему вопросу, вот что я предлагаю и рекомендую

Просто чтобы повторить и добавить все в конструктивном ответе

  • Параметр tag в WP_Query принимает термин slug , а не имя

  • Всегда всегда перезагружайте свой пользовательский WP_Query . Используйте wp_reset_postdata() после того, как ваш запрос будет выполнен, как раз перед endif

  • Вы не можете использовать tag качестве имени вашего короткого кода, это зарезервированное имя в WordPress

Я считаю, что ваш порядок действий – вот что вызывает все ваши головные боли. Кроме того, короткий код должен return свой вывод, а не echo его. Взгляните на Shortcode API на то, как создать короткий код

Прежде чем вы будете что-либо проверять в своем коде или если у вас есть теги, вам действительно нужно получить текущую запись. Без этого ваш код не будет работать. Итак, первое, что нужно сделать, это назвать глобальную $post . После этого вы можете передать идентификатор get_the_tags

Ваш код должен работать, как только это будет сделано

Вот пример: ( Caveat: untested )

 add_shortcode('shortcodetag', 'tags'); function tags() { ob_start(); global $post; $posttags = get_the_tags( $post->ID ); if ( $posttags ) { // Loop for each tag the custom post has foreach($posttags as $tag) { $tag_name = ($tag->slug); // Search for posts with the same tag, // is a custom type and don't return // the current post $args = array( 'post_type' => 'custom_post', 'tag' => $tag_name, 'post__not_in' => array( $post->ID ) ); $query = new WP_Query( $args ); // Make sure we got results if( $query->have_posts() ) { // Loop through each returned post while ( $query->have_posts() ) { $query->the_post(); // Returns null //LOOP ELEMENTS } wp_reset_postdata(); } } } $myvariable = ob_get_clean(); return $myvariable; } 

РЕДАКТИРОВАТЬ

Как предложил @TomJNowell, я действительно не вижу здесь короткого кода. Вы будете делать do_shortcode в одном шаблоне. Это точно так же, как просто вызов функции напрямую.

Вот пример, чтобы продемонстрировать это, и если я правильно понимаю ваш комментарий, пример того, как отображать определенные элементы post с использованием тегов шаблонов

 function tags() { global $post; $posttags = get_the_tags( $post->ID ); if ( $posttags ) { // Loop for each tag the custom post has foreach($posttags as $tag) { $tag_name = $tag->slug; // Search for posts with the same tag, // is a custom type and don't return // the current post $args = array( 'post_type' => 'custom_post', 'tag' => $tag_name, 'post__not_in' => array( $post->ID ) ); $query = new WP_Query( $args ); // Make sure we got results if( $query->have_posts() ) { // Loop through each returned post while ( $query->have_posts() ) { $query->the_post(); // Returns null //LOOP ELEMENTS the_title(); //display post title if ( has_post_thumbnail() ) { // check if the post has a Post Thumbnail assigned to it. the_post_thumbnail(); //display the featured image } the_content(); //displays the post's content } wp_reset_postdata(); } } } }