Best way to have script urls in WordPress - php

I am developing my own theme for private use and i have a lot of scripts working with urls with extra parameters.
I'm finding my self adding a lot of empty pages to my site just to be able to connect some php file to specific url so i will be able to send parameters to that specific address.
Is there a better way i can have urls that can be associated with specific php files without adding pages or other things to the site. just like work out of the box when installing my theme?

You should try like this code:
//page url: http://www.example/myurl
add_action( 'init', 'my_rewrite' );
function my_rewrite() {
global $wp_rewrite;
//wp-content/plugins/myplugin/myurl.php
add_rewrite_rule('myurl/$', WP_PLUGIN_URL . '/myplugin/myurl.php', 'top');
$wp_rewrite->flush_rules(true);
}
More info:
https://developer.wordpress.org/reference/classes/wp_rewrite/
https://codex.wordpress.org/Class_Reference/WP_Rewrite

Related

How to add and access custom php code in Wordpress site?

I need to add some of my own php files to an existing Wordpress site (from Bitnami) so it can be accessed from a 3rd-party service. I don't need to access anything from Wordpress in my code, but I need my code to be accessible from a url for 3rd-party services.
Like this:
https://myWordPressSite.com. <- normal WP site
https://myWordPressSite.com/myCustomDirectory/generateSerial.php <- my code
https://myWordPressSite.com/myCustomDirectory/doSomething1.php <- my code
https://myWordPressSite.com/myCustomDirectory/doSomething2.php <- my code
How can I add my directory of code to the Wordpress file structure, and how to access it from a URL?
You can add a $_GET OR $_POST to wp in the plug side
if you want I would add a code to help with not getting hack
Your url https://myWordPressSite.com?name=yes
function getdata(){
if(($_GET['name'] == "yes") || ($_POST['name'] == "Run")){
}
}
This is one way
Good Luck
Karl K
Create a folder in your theme's root folder called myCustomDirectory and place your php file inside that.
then add to your functions.php the following:
This will handle the Rewrite Rules:
add_action('init', 'custom_add_rewrite_rule');
function custom_add_rewrite_rule() {
add_rewrite_rule('^myCustomDirectory/generateSerial.php', 'index.php?generateSerial=true', 'top');
}
This will handle the Wordpress Query Vars:
function add_query_vars_filter( $vars ){
$vars[] = 'generateSerial';
return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );
This will tell wordpress to pull the correct file:
function load_custom_template($template){
if(get_query_var('generateSerial') ){
$template = get_template_directory() ."/myCustomDirectory/generateSerial.php";
}
return $template;
}
add_filter('template_include', 'load_custom_template');
make sure to flush your rewrite rules when you are done by going to: Settings > Permalinks and clicking 'save changes'
It turns out it was much simpler than I thought, or any of the other answers presented here.
The answer is to just add a directory of my own code inside the Wordpress home folder.
In the case of a AWS/Lightsail/Bitnami/Wordpress package, the home directory is:
/opt/bitnami/wordpress
So I created a directory and put my code in it..
/opt/bitnami/wordpress/myDirectory
/opt/bitnami/wordpress/myDirectory/generateSerial.php
/opt/bitnami/wordpress/myDirectory/doSomething.php
And it was then accessible from a url like:
https://myWordPressSite
https://myWordPressSite/generateSerial.php //etc
One small catch is that some Wordpress packages and some other Bitnami packages are laid out a bit different, so check on your specific installation.

wordpress custom rewrite rule to external non-wordpress php page

Hello Everyone and thank you for your help!
I have an external (outside wordpress in root directory) php file that I would like to use the custom_rewrite_rule function to make the url pretty as well as pass on information for variables that will look up an API record from that URL. You might ask why I haven't done it the regular way and made it a page template inside wordpress, and that is because I am using a custom JQuery slideshow that seems to have trouble running inside a wordpress environment.
So what I have in my child themes functions.php is:
function custom_rewrite_rule() {
add_rewrite_rule('^yacht-details/([^/]*)/([^/]*)/?','yacht-details.php?info=$matches[1]&boatid=$matches[2]','top');}
add_action('init', 'custom_rewrite_rule', 10, 0);
and in the php file am using the standard $_GET to acquire the information.
$info = $_GET["info"];
$boatid = $_GET["boatid"];
My actual problem is what I am actually getting is literally $matches[1] and $matches[2] instead of the variables.
What am I doing wrong? Does this need to be done with .htaccess instead of functions.php? The problem I run in to going that route is wordpress does not seem to like more than one subfolder.
Thank you again.

Wordpress: Change the "site_url" for a few pages

We are out of ideas. We also tried a lot.
In Wordpress we need to change the "site_url" for a few pages (because also the scripts, images, etc. need to work without much changes). The remaining pages keep the normal site_url.
Reason: We want to use a Shared SSL that looks like:
https://www.the-shared-ssl.com/www.our-website.com
So we need to change the site_url for these few pages (not all pages).
We tried the Wordpress HTTPS plugin, it doesnt work with our hoster.
We also tried to put an "if" statement into the wp-config.php, it also doesn't work.
It would be good if there's a solution without htaccess
Is there a code guru that can help us?
site_url() calls the function get_site_url() which looks up the option in your wp_options table called "site_url." Changing the config file won't have any impact on it.
What you can do is apply a filter to site_url on the pages where you need to use something else. The last part of the get_site_url() function reads:
return apply_filters('site_url', $url, $path, $scheme, $blog_id);
So if you want to modify the value that is returned add something like this to your theme's functions.php file:
add_action('template_redirect', 'modify_site_url');
function modify_site_url(){
/** check if you're on one of the pages that requires the change */
if(is_page(array('page-one', 'page-two'))){
add_filter('site_url', 'new_site_url', 10, 4);
}
}
function new_site_url($url, $path, $scheme, $blog_id){
/** modify the url here */
$url = whatever you want it to be;
return $url;
}
In the new_site_url function it's not using the additional parameters ($path, $scheme, $blog_id) but you could use those to further refine how the url is modified.

WP URL Re-writing plugin

I am trying to integrate a few non-wordpress PHP pages into an existing Wordpress site. Ideally, I want to rewrite anything request that looks like this: 'domain.com/books/bookname' to 'domain.com/catalog.php?title=bookname'. I have been messing around with the WP Rewrite API for several hours, but I just can't get anything to work. Here is my current plugin code:
register_activation_hook( __FILE__, 'wbm_catalog_activate' );
function wbm_catalog_activate() {
wbm_catalog_add_rules();
flush_rewrite_rules();
}
// Flush when deactivated
register_deactivation_hook( __FILE__, 'wbm_catalog_deactivate' );
function wbm_catalog_deactivate() {
flush_rewrite_rules();
}
add_action( 'init', 'wbm_catalog_add_rules' );
function wbm_catalog_add_rules() {
add_rewrite_rule( 'books/([^/]+)/?',
'catalog.php?title=$matches[1]', 'top' );
}
I can even inspect the $wp_rewrite object and see my new rule added, but whenever I try to visit a rewritten url, wordpress acts as though the rule were not there.
I have been banging my head up against a brick wall, and I would appreciate any help you could give!
The problem is:
The statement flush_rewrite_rules is executed before add_rewrite_rule and therefore the new cache generated does not include your stuffs in add_rewrite_rule.
You can verify with the value in your DB
select option_name, option_value from wp_options where option_name = 'rewrite_rules';
I was unable to ever resolve this issue. The site that I was working on was part of an old WordPressMU setup (2.8) with a number of sites. I did not have access to the .htaccess that the MU install was using, and it was not passing any requests through to the .htaccess file that I could edit.

How to integrate Wordpress into Kohana 3

I now need to make a Kohana 3 site have a Wordpress blog.
I've seen Kerkness' Kohana For Wordpress, but it seems to be the opposite of what I want.
Here are the options I have thought of
Style a template to look exactly like the Kohana site (time consuming, non DRY and may not work)
Include the blog within an iframe (ugly as all hell)
cURL the Wordpress pages in. This of course means I will need to create layers between comment posting, etc, which sounds like too much work.
Is there any way I can include a Wordpress blog within an existing Kohana application? Do you have any suggestions?
I found this post detailing the Kohana for Wordpress plugin, but I am still confused as to how it works.
Does it mean from within Wordpress, I can call a Kohana controller? Is this useful to me in my situation?
Oh, I did this a long time ago (actually towards the end of last year).
Assumptions
You are using Wordpress permalinks with mod_rewrite or a similar option.
You don't have register_globals() turned on. Turn it off to ensure Wordpress's global variables don't get removed by Kohana.
Renaming
First, you need to rename the __() function in Kohana. Say, you rename it to __t(). You'd need to replace it everywhere it appears, which if you use an editor like Netbeans that can find usages of a function or method is pretty easy.
Hierarchy
The next decision you need to make is whether you want to load Wordpress inside Kohana or Kohana inside Wordpress. I prefer the latter, which I'm documenting below. I could document the latter if you'd prefer to go that route.
I put the kohana directory in my theme directory.
In your functions.php file of your theme, simply
include TEMPLATEPATH . '/kohana/index.php';
Kohana Configuration
Your Kohana's index.php file also needs some work. Remove the lines that look for install.php as they will load ABSPATH . WPINC . 'install.php' instead and display an error message in your wordpress admin. You also need to change the error_reporting as at the moment Wordpress fails E_STRICT.
You will very likely need to remove the last few lines of your bootstrap (in Kohana) that process the request, and change your init:
Kohana::init(array(
'base_url' => get_bloginfo('home') . '/',
'index_file' => '',
));
In either your Wordpress functions.php file or in your bootstrap, add these lines:
remove_filter('template_redirect', 'redirect_canonical');
add_filter('template_redirect', 'Application::redirect_canonical');
where Application is a class of your choosing.
My code for the Application class (without the class definition) is:
public static function redirect_canonical($requested_url=null, $do_redirect=true)
{
if (is_404() && self::test_url())
{
echo Request::instance()->execute()->send_headers()->response;
exit;
}
redirect_canonical($requested_url, $do_redirect);
}
public static function test_url($url = NULL)
{
if ($url === NULL)
{
$url = str_replace('?'.$_SERVER['QUERY_STRING'], '', $_SERVER['REQUEST_URI']);
$url = trim($url, '/');
}
foreach (Route::all() as $route)
{
/* #var $route Route */
if ($params = $route->matches($url))
{
$controller = 'controller_';
if (isset($params['directory']))
{
// Controllers are in a sub-directory
$controller .= strtolower(str_replace('/', '_', $params['directory'])).'_';
}
// Store the controller
$controller .= $params['controller'];
$action = Route::$default_action;
if (isset($params['action']))
{
$action = $params['action'];
}
if (!class_exists($controller))
return false;
if (!(method_exists($controller, 'action_' . $action) || method_exists($controller, '__call')))
return false;
return true;
}
}
return false;
}
which lets Wordpress do it's redirect for any page that may have moved e.g. /about/calendar to /calendar as long as you don't have an about controller and calendar action defined.
So there you have it. Any urls not defined within Wordpress will fall to your defined controller (or use your theme's 404 template).
Additional
This isn't required, but you could put your theme's header.php under your kohana views folder (application or in a module) and from any of your theme files
echo View::factory('header')
You could do the same thing with your footer (or any other files for that matter). In your header.php, you could also do this:
if (isset($title)) echo $title; else wp_title(YOUR_OPTIONS);
That way you could in your controller
echo View::factory('header')->set('title', 'YOUR_TITLE');
To keep urls consistent, you may have to take off the / from the end of Wordpress permalinks so /%year%/%monthnum%/%day%/%postname%/ becomes /%year%/%monthnum%/%day%/%postname%, etc
Please let me know if you need any more help integrating Wordpress and Kohana.
I've actually used wordpress for the CMS of a code igniter site. This is the method i used to pull page content, not blog content, but maybe you can change it up a little to fit your needs.
In my front controller I added the wordpress header file
require('/path/to/wp-blog-header.php');
This gives you access to the 2 functions you'll need
get_page() – Get the page data from the database
wpautop() – Automatically add paragraph tags to page content
To get page data
$page_data = get_page( 4 ); // Where 4 is the page ID in wordpress
If you get this error:
Fatal error: Only variables can be
passed by reference…
You have to do it like this
$page_id = 4;
$page_data = get_page( $page_id );
because of a bug in certain versions of php
Then in the view
<?= wpautop($page_data->post_content) ?>
Hope this helps
EDIT
I installed wordpress at /blog in the filesystem. So wordpress actually runs as a blog normally. I just use this method to grab the pages
This is going to be extremely difficult, because of the way WordPress works. Specifically, it uses global variables all over the place, and because Kohana is scoped, you will not be able to access those variables.
Long story short: what you want is nearly impossible. However, if you get it working (without hacking WP), I would be really interested to see how you did it.
See here: http://www.intuitivity.org/archives/8
I figured it out yesterday :)
Another solution is to keep both Wordpress and Kohana installations completely separate. Then you create a custom Wordpress theme that will pull the header and footer from Kohana (you can create a Kohana controller for that).
Once you have the header and footer in, the blog looks integrated to your website even though it's still a completely separate installation. The advantage is that there's nothing to hack to either Wordpress or Kohana to get it working.
There's some more details about this method in this blog post: Integrating Wordpress into a Kohana application
I always thought this would be relatively easy. That is, to use WordPress as your site's back-end (for the blog part, at least) and use Kohana for serving up posts and pages. If I'm not mistaking, all you would need to do is set up your models (post, comment, page) to gather their data from the WordPress database (with or without ORM) instead of a new one.

Categories