在循环之外获取POST/PAGE数据

时间:2016-01-03 作者:Vico

我正在尝试制作一个专门为我的网站制作OpenGraph标签的mu插件,因为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没有太多经验(所以是jury-rig代码),也不需要处理循环外的数据,所以我从google中挖掘了一些代码并放在那里,没有结果。

有什么办法可以让这一切顺利进行吗?

2 个回复
最合适的回答,由SO网友:Vico 整理而成

在几次头痛之后,我根据米洛的回答设法解决了这个问题。但是我需要添加一个检查,如果摘录返回空,如果它返回空,我需要修剪整个内容字符串以获得所需的数据。

最终代码:

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;
}

SO网友:Milo

您在函数中使用了不存在的变量,$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 );
}

相关推荐

当in_the_loop()为假时,何时以及为什么is_Single(‘my_cpt’)为真?

我正在使用模板系统的示例代码。此地址的页码:http://project.test/my_cpt/hello-post/.无法理解原因is_singular( \'my_cpt\' ) 是true 虽然in_the_loop() 是false.在页面模板中The Loop "E;“工程”:if ( have_posts() ) { while ( have_posts() ) { the_post(); ?>