Custom Data (Pro)
Last updated
Was this helpful?
Last updated
Was this helpful?
Advanced Views automatically loads data from the selected fields into the View template. In most general cases, this will be sufficient to generate the desired output. However, there may be specific cases where you need to include additional data that is not available in the plugin's list of fields.
To address this need, you can take advantage of the Custom Data feature, which is available in Advanced Views Pro. This feature allows you to retrieve any necessary data using a PHP code snippet and then use these extra variables in your template.
You can find the 'Custom Data' field under the 'Template' tab in the View settings. In this field, you can insert any PHP code and use WordPress functions as needed.
The field with the snippet can be found in the Template tab of your View.
The snippet is a PHP code, which must return an instance of the Custom_View_Data
class.
using the get_variables()
method you can pass custom variables to the View template
using the get_ajax_response()
method you define the Ajax callback for the block.
using the get_object_id()
method you can get the id of the displaying object
using the get_custom_arguments()
method you can access the . The field is available in the both methods above.
using the get_default_variables()
method you can access to the default twig variables (that filled out automatically by the plugin)
using the get_container()
method you can access the PHP-DI Container (see the related chapter of this page)
A simple example is below:
You won't see a significant benefit if your MyClass
has no dependencies. But let's say the class has 2-3 constructor arguments (e.g., a logger and a theme object). To get the MyClass
instance, you would need to create those instances initially. Furthermore, one of those arguments may have its own arguments, and your creation code will turn into a multi-line creation.
Additionally, PHP-DI supports and encourages the use of interfaces, so you can call
->get(MapInterface::class)->calculate()
in your code, while defining which exact class should be used for each interface in the container configuration.
Go to Edit your View.
Switch to the Template tab.
Scroll down until you see the Custom Template Variables field.
Add your PHP code.
Click on the Update button to save your View.
is a well-known dependency injection container. If you haven't used it, we recommend checking it out and harnessing its capabilities.
Advanced Views supports PHP-DI out-of-the-box. To simplify access to your theme's PHP class instances inside the Custom_Data instances, you can employ the PHP-DI container. To do this, you need to define the container in your theme using the hook. Then, you can access it using the get_container()
method in any method of the Custom_Data class.
If you're unfamiliar with , the benefits of the code above may be unclear to you. We could replace $container->get
with new MyClass()
and it would work perfectly. However, the container is a powerful tool, especially for more complex cases.
With PHP-DI, you don't need to worry about the constructor, as PHP-DI will use to get the necessary instances and pass them to the constructor on the fly.
An additional benefit is that the ->get
method, ->make
, creates the instance only once, reusing it for other calls. This way, you get a smart 'global' variables pool, allowing you to handle dependencies easily and efficiently.
Unlike the , which is , it doesn't turn your code into single-instance classes. You still define constructors, clearly specifying class dependencies, while avoiding the hassle of manual creation.