Hi,
uuhm unfortunately that won’t work anymore since the GoogleSitemapGenerator class is “lazy loaded” by the GoogleSitemapGeneratorLoader class to avoid loading the whole generator on every page load.
I think the easiest way would be if you just call the “sm_build_cron” hook.
do_action("sm_build_cron");
If the plugin is active, the building will start on this hook. If not, nothing will happen 🙂
Best regards,
Arne
What about:
` if(GoogleSitemapGeneratorLoader::LoadPlugin()) {
$gs = GoogleSitemapGenerator::GetInstance();
$gs->CheckForAutoBuild();
}
Would that work?
Yes, that works too (at the moment ;-))
However the user will receive a fatal error in case the plugin is not active, sou you would at least have to add a check if the “GoogleSitemapGeneratorLoader” class exists…
> at the moment 😉
Being able to trigger a sitemap rebuild from other plugins is a great feature – whatever you do please make this functionality still be available 🙂
Hey arnee – just saw the latest update, and I’m now do_action(‘sm_rebuild’)-ing quite happily – thanks!
You’re welcome 🙂 Let me know if you have any other ideas or suggestions.
Hey Arnee,
Some users are having problems – I’m hooking into sm_buildmap, and my plugins is then (basically) doing:
`$generatorObject = &GoogleSitemapGenerator::GetInstance();
if($generatorObject!=null) {
$generatorObject->AddUrl($prod_url, $product->dt, “weekly”, 0.25);
}
The code is getting inside the “if” so we’ve got the instance, but the URLs aren’t being added to the sitemap – any ideas why not?
Just a bit of an update. I’ve got access to 2 blogs – one with this problem, and another where things work fine. After various bits of debugging I’ve found the following:
On the site that works then the object returned by GoogleSitemapGenerator::GetInstance() is “fully populated”, e.g. has options etc. loaded
On the site that doesn’t work, then the object returned looks like this:
googlesitemapgenerator Object
(
[_svnVersion] => $Id: sitemap-core.php 175664 2009-11-20 21:21:09Z arnee $
[_options] => Array
(
)
[_pages] => Array
(
)
[_freqNames] => Array
(
)
[_prioProviders] => Array
(
)
[_initiated] =>
[_lastError] =>
[_lastPostID] => 0
[_isActive] =>
[_isScheduled] =>
[_fileHandle] =>
[_fileZipHandle] =>
[_ui] =>
)
IE although it’s an object of the right class – it doesn’t appear to have been initialised properly.
I have access to working and non-working blogs and am happy to add debug code if you tell me what & where 🙂
Hi,
could you check which PHP version is installed on the not working one?
Thanks,
Arne
It never occurred to me to check that …
WordPress 2.8.5 with DB 11548 on PHP 4.4.9
Plugin version: 3.2 ($Id: sitemap-core.php 175664 2009-11-20 21:21:09Z arnee $)
Is that the problem then?
Mhh, maybe its related with the references, since PHP4 returns a copy of the object by default (instead of a reference, as in PHP5). I will have a look 🙂
Can you try to search for “GoogleSitemapGenerator::GetInstance()” in the sitemap.php and replace it with “&GoogleSitemapGenerator::GetInstance()”? Should be there 7 times.
Hmm – still no products in the sitemap, and the generator now looks like this:
googlesitemapgenerator Object
(
[_svnVersion] => $Id: sitemap-core.php 175664 2009-11-20 21:21:09Z arnee $
[_options] => Array
(
)
[_pages] => Array
(
)
[_freqNames] => Array
(
)
[_prioProviders] => Array
(
)
[_initiated] =>
[_lastError] =>
[_lastPostID] => 0
[_isActive] =>
[_isScheduled] =>
[_fileHandle] =>
[_fileZipHandle] =>
[_ui] => googlesitemapgeneratorui Object
(
[sg] => googlesitemapgenerator Object
(
[_svnVersion] => $Id: sitemap-core.php 175664 2009-11-20
21:21:09Z arnee $
[_options] => Array
(
)
[_pages] => Array
(
)
[_freqNames] => Array
(
)
[_prioProviders] => Array
(
)
[_initiated] =>
[_lastError] =>
[_lastPostID] => 0
[_isActive] =>
[_isScheduled] =>
[_fileHandle] =>
[_fileZipHandle] =>
[_ui] =>
)
[mode] => 27
)
)
Interesting. So its definitely a reference php4 problem. I’m not at my pc anymore, but I guess at some point the sitemap generator object is not passed by reference.
Can you try to add a & to the constructor argument of the UI class? The generator object should be passed there.
I changed this:
function GoogleSitemapGeneratorUI($sitemapBuilder) {
to this:
function GoogleSitemapGeneratorUI(&$sitemapBuilder) {
Was that what you meant? If so, still no joy. If you want to email me and maybe we can swap MSN/GoogleTalk/Wave details to try and work through it?
I can probably let you have the login to an affected site as well if that’s useful?