vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB5 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=263)
-   -   Wordpress Header & Footer Integation (https://vborg.vbsupport.ru/showthread.php?t=302307)

jdorsey 09-15-2013 10:09 AM

Wordpress Header & Footer Integation
 
Hello,
I'm trying to integrate vBulletin 5.0.x with Wordpress. Specifically, I'm trying to add the WordPress header and footer to show in vBulletin using Wordpress's functions get_header() and get_footer() that come from the file wp-blog-header.php in the WordPress installation folder. So I'm trying to figure out the following:

1) require the wp-blog-header.php file somewhere for vbulletin to use using require()
2) to figure out where to insert the php functions get_header() and get_footer()

I looked at this post: https://vborg.vbsupport.ru/showthread.php?t=298770 and it gave some information on making an extension by adding a folder to the /core/packages folder and putting a class file there with a custom function that I could use in a template, but I couldn't find much information on how to create a product xml file. It seems important to do this because I can't register my extension in the Admin CP -> Products & Hooks -> Manage Products -> Add/Import Product without it.

I'm don't need to create hooks or templates, and this product I'm creating doesn't need any custom html. Here's the code I wrote so far:

PHP Code:

<?php
class wp_integrate extends vB_Api_Extensions
{
    public 
$product 'wp_integrate';
    public 
$version '1.0.0';
    public 
$developer 'me';
    public 
$title 'WordPress Integration Extension';
    public 
$minver '5.0.4';
    public 
$maxver '5.0.4';
    public 
$infourl '';
    public 
$checkurl '';
    public 
$AutoInstall 0;
    public 
$extensionOrder 9;
    
    public function 
wpHeader(){
        
get_header();
    }
    
    public function 
wpFooter(){
        
get_footer();
    }
}

I added these lines to the /core/global.php file because I couldn't figure out where to put a php require statement:

PHP Code:

define('ROOT_DIR',str_replace('\\\\''/'realpath(dirname(__FILE__))).'/'); #Get real path for root dir ---linux and windows
require(ROOT_DIR.'../beta/wp-blog-header.php'); // get WordPress 

So any help would be greatly appreciated - I couldn't find any docs on doing this after 6+ hours of searching.

marco_kellershoff 09-15-2013 10:33 AM

You don't need a product xml. All you need is an extension and a product. The extension will show up without a product.xml. Once it shows up you can add a product for that extension manually in the AdminCP.

The extension is basically a .php file inside the packages/yourextensionname/api/ directory.

PHP Code:

<?php
class wpHeaderFooter_Api_Options extends vB_Api_Extensions
{
    public 
$product 'wpHeaderFooter';
    public 
$version '1.0.0';
    public 
$developer 'foo';
    public 
$title 'WordPress Integration Extension';
    public 
$minver '5.0.4';
    public 
$maxver '5.0.4';
    public 
$infourl '';
    public 
$checkurl '';
    public 
$AutoInstall 0;
    public 
$extensionOrder 10;
    
    public function 
wpHeader(){
        
define('ROOT_DIR',str_replace('\\\\''/'realpath(dirname(__FILE__))).'/'); #Get real path for root dir ---linux and windows
        
require_once(ROOT_DIR.'../beta/wp-blog-header.php'); // get WordPress  
        
get_header();
    }
    
    public function 
wpFooter(){
        
define('ROOT_DIR',str_replace('\\\\''/'realpath(dirname(__FILE__))).'/'); #Get real path for root dir ---linux and windows
        
require_once(ROOT_DIR.'../beta/wp-blog-header.php'); // get WordPress  
        
get_footer();
    }
}

Put this into packages/wpheaderfooter/api/options.php



Not tested, but should work.

jdorsey 09-15-2013 11:27 AM

Thank you for such a quick reply! I got the extension successfully registered.

Is this how I run the function in a template?:

HTML Code:

{vb:data wp, wpHeaderFooter_Api_Options, wpHeader}
(not sure about the varname "wp") - I put this in but nothing shows up in the header template.

Also, do I need to register this as a product in the AdminCP import/add product page for this to work, or is just registering the extension good enough?

Thanks again!

marco_kellershoff 09-15-2013 11:42 AM

I'm not familiar with wordpress, so I don't really know what wpHeader() is doing.

If it is just returning the header html like so:
PHP Code:

return $wordpress_html_string

then you need to alter the extension's code a bit like this:

PHP Code:

    public function wpHeader(){
        
define('ROOT_DIR',str_replace('\\\\''/'realpath(dirname(__FILE__))).'/'); #Get real path for root dir ---linux and windows
        
require_once(ROOT_DIR.'../beta/wp-blog-header.php'); // get WordPress  
        
return get_header();
    } 

(now the function returns the value)

and then in your template you do something like this:

Code:

{vb:data wp_header_html_string, wpHeaderFooter_Api_Options, wpHeader}
{vb:raw wp_header_html_string}

the first line just assigns the data and the second ones echos it :)

--------------- Added [DATE]1379249675[/DATE] at [TIME]1379249675[/TIME] ---------------

You might also want to read about this related topic here:
http://stackoverflow.com/questions/1...-a-text-string

jdorsey 09-15-2013 05:14 PM

Ok, I feel like I'm so close, but missing something. Here is my new extension class file so far. I simplified it just to get it to work at all:

PHP Code:

<?php

class wpHeaderFooter_Api_Options extends vB_Api_Extensions
{
    public 
$product 'wpheaderfooter';
    public 
$version '1.0.0';
    public 
$developer 'me';
    public 
$title 'WordPress Integration Extension';
    public 
$minver '5.0.4';
    public 
$maxver '5.0.4';
    public 
$infourl '';
    public 
$checkurl '';
    public 
$AutoInstall 1;
    public 
$extensionOrder 10;
    
    public function 
wpHeader(){
        
//define('ROOT_DIR',str_replace('\\\\', '/', realpath(dirname(__FILE__))).'/'); #Get real path for root dir ---linux and windows
        //require_once(ROOT_DIR.'../beta/wp-blog-header.php'); // get WordPress  
        //return get_header();
        
return "<h1>My Custom Header</h1>";
    }
    
    public function 
wpFooter(){
        
//define('ROOT_DIR',str_replace('\\\\', '/', realpath(dirname(__FILE__))).'/'); #Get real path for root dir ---linux and windows
        //require_once(ROOT_DIR.'../beta/wp-blog-header.php'); // get WordPress  
        //get_footer();
                
return "<h1>My Custom Footer</h1>";
    }
}

And here is my new template markup (using the header template), which I inserted around line 114 (shortly after the <body> opening tag):

Code:

<h1>Start</h1>
{vb:data wphead, wpHeaderFooter_Api_Options, wpHeader}
{vb:raw wphead}
<h2>End</h2>

Also, you mentioned I need that I need to manually add the product. I did so in the AdminCP ->Products & Hooks -> Manage Products -> Add/Import Product, Add Product section. Here I just gave the Product id text field the same name as $product variable I used in my class above: 'wpheaderfooter' .

I do have the options -> Products/Hook System enabled (set to yes).

However, I get no output. Thanks so much for your patience in helping me. Hopefully I'm just missing something simple.

marco_kellershoff 09-15-2013 08:28 PM

Just try to add a hook - then it should work :)

jdorsey 09-16-2013 12:29 AM

Ok, I pulled my {vb:raw} code out of the header template and made a new template, "wp_header_footer" and put it in there:

HTML Code:

<h1>Start</h1>
{vb:data wphead, wpHeaderFooter_Api_Options, wpHeader}
{vb:raw wphead}
<h2>End</h2>


Then I created a new hook.
  • product: "WP Header and Footer"
  • title: "WP Header Footer Hook"
  • hook location: header_toolbar
  • execution order: 10 (Default)
  • template name: "wp_header_footer"
  • hook arguments: left blank

The html I put in the template shows up (h2 and h1), but the {vb:raw wphead} does not.

The thing I am bit worried about is that when I created a new Product ("WP Header and Footer"), I didn't have any way I could see to link it to my wpHeaderFooter_Api_Options class listed in the extensions. Am I missing a step?

marco_kellershoff 09-16-2013 06:00 AM

If you can wait until tommorow, I'll write you a detailed, step by step guide, including (working) source code and screenshots.

It's just that today we have planned a relaunch of one of our mayor sites :) Don't have really time for this ATM.

But please, don't get angry or sad - I know the vBulletin software is lacking good docs, which is really sad - I fiddled around about 2 full 8h workdays to understand how the new extension system in vB5 works - it's a shame.

I'll come back to you tomorrow, k?

--------------- Added [DATE]1379336922[/DATE] at [TIME]1379336922[/TIME] ---------------

Quote:

Originally Posted by jdorsey (Post 2445886)
Ok, I pulled my {vb:raw} code out of the header template and made a new template, "wp_header_footer" and put it in there:

HTML Code:

<h1>Start</h1>
{vb:data wphead, wpHeaderFooter_Api_Options, wpHeader}
{vb:raw wphead}
<h2>End</h2>


Then I created a new hook.
  • product: "WP Header and Footer"
  • title: "WP Header Footer Hook"
  • hook location: header_toolbar
  • execution order: 10 (Default)
  • template name: "wp_header_footer"
  • hook arguments: left blank

The html I put in the template shows up (h2 and h1), but the {vb:raw wphead} does not.

The thing I am bit worried about is that when I created a new Product ("WP Header and Footer"), I didn't have any way I could see to link it to my wpHeaderFooter_Api_Options class listed in the extensions. Am I missing a step?




I'm really sorry for such misleading information ... must have been a lack of sleep & coffee on my side..

HTML Code:

<h1>Start</h1>
{vb:data wphead, options, wpHeader}
{vb:raw wphead}
<h2>End</h2>

it has to be options, because you are simply extending the options api from vbulletin..

jdorsey 09-16-2013 01:25 PM

That worked! I replaced wpHeaderFooter_Api_Options with options, and it now works. Thanks so much! Hopefully the rest is just php stuff and not vbulletin related. I may post how I actually completed the whole thing in a little tutorial for posterity. And that would be great if you could post a little tutorial for how to make a hello world extension. If you're like me, I know you must be very busy though.

moonclamp 10-01-2013 11:15 PM

Just posting briefly as I'm interested in this too, and have far less php knowledge! :)

When I get this right, will it also add the wordpress top menu, or is that another problem to solve?

A tutorial would benefit me immensely, thank you.


All times are GMT. The time now is 11:26 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01245 seconds
  • Memory Usage 1,810KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (2)bbcode_code_printable
  • (4)bbcode_html_printable
  • (6)bbcode_php_printable
  • (1)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (10)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete