Intereting Posts
Начисление суммарного срока для таксономий привязки Перекрестные продажи на странице продукта WooCommerce Активация сети; if (! current_user_can ('manage_options')) блокирует меня … Как хранить и отображать пользовательские данные за сообщение? Добавить раскрывающееся меню с помощью «add_filter => wp_nav_menu_items» Внешняя таблица стилей на страницу Как перенести установку WordPress с одного сайта на другой, включая все изображения? Следующие сообщения Предыдущие сообщения только для стандартного почтового формата Список пользовательских таксономий, связанных с сообщениями автора Как добавить класс к термину Как загрузить файл без расширения глобальные категории – разделять определенные категории в wordpress multisite 3 уровня Глубокое навигационное меню Не показывать все уровни Следующий и предыдущий (разбиение на страницы в этом случае) Не отображается Мета-название W3C Ошибка проверки с помощью

Получать данные о записи / странице вне цикла

Я пытаюсь сделать mu-плагин, посвященный созданию тегов OpenGraph для моего веб-сайта, поскольку текущий плагин в каталоге WP обновлен на века.

Но я побежал с несколькими головными болями, пытаясь получить данные о постах или страницах, чего я никогда раньше не пробовал.

Используя этот кусок кода:

<?php /* Plugin Name: Open Graph! Description: Adiciona tags Open Graph (Facebook) para o site. Author: ChronoMania Team Version: 1.0 Author URI: http://chronomania.com.br */ function pegarConteudoPost() { if (is_single()) { $texto = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_id)); if empty($texto) { $texto = wp_trim_words($post->post_content); } if empty($texto) { $texto = get_bloginfo('description'); } } elseif (is_page()) { $texto = wp_trim_words($page->post_content); } else { $texto = get_bloginfo('description'); } return $texto; } function pegaURLAtual() { $link = 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; return $link; } function montaOpenGraph() { echo '<meta property="og:title" content="' . wp_title("", false) . '">'; echo '<meta property="og:site_name" content="' . get_bloginfo('name') . '">'; echo '<meta property="og:url" content="' . pegaURLAtual() . '">'; echo '<meta property="og:description" content="' . pegarConteudoPost() . '">'; echo '<meta property="og:image" content="' . get_template_directory_uri() . '/img/social/ogp_logo.png">'; echo '<meta property="og:type" content="article">'; } // Registrando funções add_action('wp_head', 'montaOpenGraph'); ?> 

Это дает мне ошибку 500. Поэтому мне удалось отследить ошибку до функции pegarConteudoPost ().

Как я уже говорил, у меня нет большого опыта работы с php (так что код жюри) и никогда не нужно работать с данными за пределами цикла, поэтому я выкапываю код из google и помещаю туда, без каких-либо результатов.

Любые идеи, как я могу сделать эту работу?

Solutions Collecting From Web of "Получать данные о записи / странице вне цикла"

Вы используете несуществующие переменные в своей функции, $post_id , $post , $page .

Используйте get_queried_object для получения данных с текущей страницы.

 if( is_single() || is_page() ){ $this_page = get_queried_object(); $excerpt = get_post_field( 'post_excerpt', $this_page->ID ); } 

После нескольких головных болей мне удалось решить вопрос, основанный на ответе Майло. Но мне нужно добавить проверку, если выдержка вернулась пустой, и если она вернется пуста, мне нужно обрезать всю строку содержимого, чтобы получить нужные данные.

Итоговый код:

 function pegarConteudoPost() { if( is_single() || is_page() ) { $this_page = get_queried_object(); $excerpt = get_post_field( 'post_excerpt', $this_page->ID ); if ($excerpt === '') { $excerpt = wp_trim_words(get_post_field( 'post_content', $this_page->ID ), 55); } $texto = $excerpt; } else { $texto = get_bloginfo('description'); } return $texto; }