I am building a simple plugin of wordpress, and trying to use theme's function into plugin's file, but it is saying "Call to undefined function", while that function exists in themes.php of current active theme.that function is in use in theme's files but can't accessible in plugin's file, can anyone guide what to do?
while I have to attach plugin with theme as mandatory plugin.
Thank you
Plugins are loaded before the theme so the function hasn't been defined at the time you're calling it. Execute your code on a hook such as init instead.
E.g.
function wpse_my_plugin_init() {
myPreviouslyUndefinedThemeFunction();
}
add_action( 'init', 'wpse_my_plugin_init' );
See here for a list of hook options: https://codex.wordpress.org/Plugin_API/Action_Reference
The earliest opportunity you have to call this code would be after_setup_theme.
On another note I'd suggest rethinking this approach. A plugin should be an independent module; it shouldn't be tied to your theme.
Your approach/design is serious flawed. Plugin functionality should never rely on theme functionality. As already pointed out by #NathanDawson, plugins get loaded first, then child theme functions then parent theme functions, so your approach will never work as indented or without a lot of unnecessary bloated code
Plugins are meant to extend site functionality, and not theme functionality. I think this is where your idea is seriously flawed, and most probably due to a lack of knowledge on who should do what and when
As I have stated, plugins should give functionality to the site. Functionalities like favicons, custom post types, custom taxonomies, shortcodes, widgets, related posts and rewrite rules should be in a plugin. This gives functionality to your site, which simply mean, when you change the theme, these functionalities won't change or they won't be affected. Also, if the plugin is removed, it doesn't change the way how the theme looks and operate.
Theme specific functions are functions that gives functionality to the theme itself. Without these functions, the theme looses functionality or its looks. It simply means thant the theme changes. These functions includes functions to enqueue your stylesheets and scripts, theme suppport functions, sidebars, custom headers and backgrounds and registering image sizes.
If you are going to make a plugin rely on theme code, you should be looking to create a child theme, as child themes are meant to extend the main theme. Child themes inherit all functionalities from the parent theme, and can extend, modify or add new functionality to the parent theme.
To conclude, by making a plugin rely on theme code, you are making your site very vulnerable to breakage. If you change your theme, you will break your site as you will break your plugin. This is not how plugins and themes were made to interact. By creating a child theme instead, you void that risk as child themes cannot be activated without the parent theme being in the theme's folder and neither can any two themes be activated at the same time.
Related
There are some plugins that I can override in my child theme (e.g. woocommerce, BuddyPress, bbpress, etc). Usually creating a folder named the same as the plugin in the child theme root and making changes there. However, that doesn't always work for ANY plugin. I'd rather not make any structural changes in the plugin itself since it will be all gone on a plugin update. But I made a copy of the plugin in the child theme and it didn't do anything. How can I do this so that I can still get all the functionality I need from the main plugin and still have my alterations prevail?
I have updated my WordPress version. The style of the css is modified. I have a backup version. Should I take the oldest file for plugins and theme in order to resolve that issue?
you should have a child theme and put your custom css in the css-file from your child-theme.
Your child-theme would not touch from any update and your custom code is save
Taken from the WordPress Codex:
WARNING: The upgrade process will affect all files and folders included in the main WordPress installation. This includes all the core files used to run WordPress. If you have made any modifications to those files, your changes will be lost.
When you do any theme changes you should always put your changes in either a custom theme you have made yourself (so only you update it), or if you're using someone else's theme, create a child theme.
More information about child themes can be found here:
A child theme is a theme that inherits the functionality and styling of another theme, called the parent theme. Child themes are the recommended way of modifying an existing theme.
As for plugins, they don't work in the same way so you'll need to make sure that any plugins you change are your own otherwise you'll lose the changes when you update them.
Lastly, you can also use the WordPress Customiser (Appearance > Customize in the dashboard) if you don't want a child theme but want to insert custom CSS. That allows you to edit CSS safely within the dashboard and keep your changes safe even when you update things.
I need to create a plugin in wordpress that should be independent of theme. That means it can work on any theme. How can I achieve this?
As you say you need to create a plugin. Plugins are all independent from Themes.
Check out the official WordPress Codex entry for that.
Also if it is more simple just create a function in a separate file and include it via you functions.php with get_template_part(). Here are the Codex informations for that function.
All plugins are independent from any themes by default, so you don't need to worry about it.
If your concern is to avoid conflicts with all themes, there's no common rule to achieve that. It depends on what type of plugin you are creating and how are you creating it. You just have to think of all possible issues that may come later by any theme and make a way to avoid these.
I would like to know if there was any methodologies to inherit or extend a plugin files to theme directory as woocommerce did and customize them without touching the base/core files. please share any links or thoughts
Thanks
You're looking for WordPress's add_action() and do_action() functions. WooCommerce, for example, makes use of these functions by using hooks and filters for templates and functions.
For example, WooCommerce does things like do_action( 'woocommerce_before_main_content' );. This means that you can "add and action", override functionality, remove actions, and generally customize things how you see fit.
Not all plugins and themes ship with this functionality; but browsing the source code can often reveal instances of this. It's more of a courtesy by developers.
This is puzzling. I have a child theme (with its own custom functions.php) that works fine except for a handful of pages. For some reason, it's like those handful of pages don't recognize the custom functions.php file.
I have the user filling out a BuddyPress registration form - and then have my functions.php file use the bp_after_registration_confirmed hook to update a few things behind the scenes. The bizarre part is that this works exactly as expected in my development environment - with functions.php responding to the BuddyPress hook. But on the live server, it totally ignores that and just completes registration without invoking my custom function.
Any idea what I may be missing?
What could possibly cause the live server to not see/execute the child theme's custom functions.php file in a handful of instances?
-- UPDATE --
I noticed that for the pages that do not see the child theme's functions.php, they do see functions from the parent theme's functions.php file. Weird, right?
Have you checked if they are using child theme templates?
If they're using parent theme templates, try creating overriding copies of the same template and see if they then use your child themes functions.php