在插件中执行AJAX调用后修改元标签

时间:2018-07-13 作者:Victoria Ruiz

我有一个插件,可以通过检查URL中的查询变量自动从新闻发布者加载文章。

如果请求了一篇文章,它会对此发布者进行AJAX调用,创建新的WP\\U帖子并将其加载到模板中。

我需要在这个页面中添加open graph元标记,我不知所措。

我的第一次失败尝试是一次普通尝试:

add_action( \'wp_head\', \'insert_fb_in_head\', 5 );
从函数。php的主题,我原本希望从我的构建帖子中获取信息,但事实证明global $post 返回的NULL 在这种特殊情况下。

所以我猜我的$post 稍后生成。

我检查过,在身体内添加og元不会让他们被Facebook发现。

我抓住救命稻草,试图从构建帖子的函数中调用该钩子,但这甚至没有触发。

在这种情况下,如何修改头部?我确信您将需要更多的代码,但我不太确定要提供什么代码。我会根据评论更新这篇文章。

更新:一些代码背景

我有几个public hooks 在插件中。

private function define_public_hooks() {
    $plugin_public = new MyPlugin_Public( $this->get_plugin_name(), $this->get_version(), $this->get_public_name(), $this->get_endpoint_domain() );
    $this->loader->add_action( \'wp_enqueue_scripts\', $plugin_public, \'enqueue_styles\' );
    $this->loader->add_filter( \'query_vars\', $plugin_public, \'mp_virtualpage_query_vars\' );  
    $this->loader->add_action(\'loop_start\', $plugin_public, \'mp_display_post\');
    //and then some more
}
display_post 功能:

public function mp_display_post($query) {
    global $wp_query;
    if (isset($query->query[\'virtualpage\'])) {
        $mp_post = $this->mp_query_post($query->query[\'nda_id\'],  false, true);
        // replace the query with it
        unset($query->posts);
        $query->posts = array();
        $query->posts[0] = $nd_post;
        $query->post_count  = 1;
    }
} 
概述the post query:

public function mp_query_post($nda_id, $redirect = false, $adapt_url = false) 
{
        global $post; 
    $chars = array("/", "-", ":", ".");

    $endpoint = $this->endpoint_domain . \'articles/\'. $nda_id;

    $response =  wp_remote_get($endpoint, $args);               
    $response_body = json_decode(wp_remote_retrieve_body($response));
    $response_code = wp_remote_retrieve_response_code( $response );

    if ($response_code == 200) {
        //SUCCESS
        $article = $response_body->article;


        // create the post and fill up the fields
        $new_post = new WP_Post((object)array(
            //\'ID\' => $article->id,
            \'post_title\'   => $article->title,
            \'post_content\' => $article->body,
            //so on and so forth with all properties
        )); 

    } else {
        //FAIL
        $new_post = new WP_Post((object) array(
            \'post_title\' => "Oops! We could not find this article",
            //etcetera
        )); 

    }

    return $new_post;
}

1 个回复
SO网友:Victoria Ruiz

我花了一段时间来修补挂钩,但最后,我通过提前装好柱子来修复了它。而不是loop_start:

$this->loader->add_action(\'loop_start\', $plugin_public, \'mp_display_post\');
我用过get_header:

$this->loader->add_action(\'get_header\', $plugin_public, \'mp_display_post\');
这工作正常,因为现在帖子信息是在之前加载的wp_head 调用,因此我可以使用加载的帖子数据作为打开的图形标记,通常的方式是:

add_action( \'wp_head\', \'insert_og_in_head\', 5 );

结束

相关推荐

Wordpress Admin Tooltip hooks

我想知道是否有一种方法可以使用Wordpress管理工具提示(灰色和蓝色),当你更新你的Wordpress(3.x)时会显示这些提示。显示新功能。谢谢