Conditions is a new and powerful feature in Oxygen using which we can control the output of elements conditionally.
Official documentation page: https://oxygenbuilder.com/documentation/other/conditions/
In this developer-centric article, I am going to share a summary of code for creating custom conditions from the above link with my own notes, comments and possible improvements regarding code formatting etc.
Let’s take the example of creating a custom condition called Current Post ID
.
Using this condition user should be able to control the output of selected element(s) based on
Ex.: In the Template that applies to all single posts, output a Section on the front-end only for a Post whose ID is 104.
Here’s the code we need to add for this using Code Snippets. If you would like to add in a custom functionality plugin, follow this.
Version 1
<?php
if ( function_exists( 'oxygen_vsb_register_condition' ) ) {
oxygen_vsb_register_condition(
// Condition Name
'Current Post ID',
// Values: The array of pre-set values the user can choose from.
// Set the custom key's value to true to allow users to input custom values.
array(
'options' => array(),
'custom' => true
),
// Operators
array( '==', '!=', '>=', '<=', '>', '<' ),
// Callback Function: Name of function that will be used to handle the condition
'ex_condition_post_id_callback',
// Condition Category: Default ones are Archive, Author, Other, Post, User
'Post'
);
}
/**
* Callback function to handle the condition.
* @param mixed $value Input value - in this case, ID of a Post entered by the user.
* @param string $operator Comparison operator selected by the user.
*
* @return boolean true or false.
*/
function ex_condition_post_id_callback( $value, $operator ) {
$current_post_id = get_the_ID();
// return the integer value of $value
$value = intval( $value );
if ( $operator == "==" ) {
if ( $current_post_id == $value ) {
return true;
} else {
return false;
}
} else if ( $operator == "!=" ) {
if ( $current_post_id != $value ) {
return true;
} else {
return false;
}
} else if ( $operator == ">=" ) {
if ( $current_post_id >= $value ) {
return true;
} else {
return false;
}
} else if ( $operator == "<=" ) {
if ( $current_post_id <= $value ) {
return true;
} else {
return false;
}
} else if ( $operator == ">" ) {
if ( $current_post_id > $value ) {
return true;
} else {
return false;
}
} else if ( $operator == "<" ) {
if ( $current_post_id < $value ) {
return true;
} else {
return false;
}
}
}
Version 2
Let’s simplify the inner if conditions using the handy ternary operator.
<?php
if ( function_exists( 'oxygen_vsb_register_condition' ) ) {
oxygen_vsb_register_condition(
// Condition Name
'Current Post ID',
// Values: The array of pre-set values the user can choose from.
// Set the custom key's value to true to allow users to input custom values.
array(
'options' => array(),
'custom' => true
),
// Operators
array( '==', '!=', '>=', '<=', '>', '<' ),
// Callback Function: Name of function that will be used to handle the condition
'ex_condition_post_id_callback',
// Condition Category: Default ones are Archive, Author, Other, Post, User
'Post'
);
}
/**
* Callback function to handle the condition.
* @param mixed $value Input value - in this case, ID of a Post entered by the user.
* @param string $operator Comparison operator selected by the user.
*
* @return boolean true or false.
*/
function ex_condition_post_id_callback( $value, $operator ) {
$current_post_id = get_the_ID();
// return the integer value of $value
$value = intval( $value );
if ( $operator == "==" ) {
return ( $current_post_id == $value ) ? true : false;
} else if ( $operator == "!=" ) {
return ( $current_post_id != $value ) ? true : false;
} else if ( $operator == ">=" ) {
return ( $current_post_id >= $value ) ? true : false;
} else if ( $operator == "<=" ) {
return ( $current_post_id <= $value ) ? true : false;
} else if ( $operator == ">" ) {
return ( $current_post_id > $value ) ? true : false;
} else if ( $operator == "<" ) {
return ( $current_post_id < $value ) ? true : false;
}
}
Version 3
Oxygen provides a helper function oxy_condition_eval_int
i.e.,
if ( $operator == "==" ) {
return ( $current_post_id == $value ) ? true : false;
} else if ( $operator == "!=" ) {
return ( $current_post_id != $value ) ? true : false;
} else if ( $operator == ">=" ) {
return ( $current_post_id >= $value ) ? true : false;
} else if ( $operator == "<=" ) {
return ( $current_post_id <= $value ) ? true : false;
} else if ( $operator == ">" ) {
return ( $current_post_id > $value ) ? true : false;
} else if ( $operator == "<" ) {
return ( $current_post_id < $value ) ? true : false;
}
can be simplified as
return oxy_condition_eval_int( $current_post_id, $value, $operator );
so our full code then becomes:
<?php
if ( function_exists( 'oxygen_vsb_register_condition' ) ) {
oxygen_vsb_register_condition(
// Condition Name
'Current Post ID',
// Values: The array of pre-set values the user can choose from.
// Set the custom key's value to true to allow users to input custom values.
array(
'options' => array(),
'custom' => true
),
// Operators
array( '==', '!=', '>=', '<=', '>', '<' ),
// Callback Function: Name of function that will be used to handle the condition
'ex_condition_post_id_callback',
// Condition Category: Default ones are Archive, Author, Other, Post, User
'Post'
);
}
/**
* Callback function to handle the condition.
* @param mixed $value Input value - in this case, ID of a Post entered by the user.
* @param string $operator Comparison operator selected by the user.
*
* @return boolean true or false.
*/
function ex_condition_post_id_callback( $value, $operator ) {
$current_post_id = get_the_ID();
// return the integer value of $value
$value = intval( $value );
return oxy_condition_eval_int( $current_post_id, $value, $operator );
}
If we were evaluating a string instead of int, use oxy_condition_eval_string()
instead similarly.
Version 4
array( '==', '!=', '>=', '<=', '>', '<' )
can be replaced with
$oxy_condition_operators['int']
which is a global variable that Oxygen adds.
So our final code then becomes:
<?php
if ( function_exists( 'oxygen_vsb_register_condition' ) ) {
global $oxy_condition_operators;
oxygen_vsb_register_condition(
// Condition Name
'Current Post ID',
// Values: The array of pre-set values the user can choose from.
// Set the custom key's value to true to allow users to input custom values.
array(
'options' => array(),
'custom' => true
),
// Operators
$oxy_condition_operators['int'],
// Callback Function: Name of function that will be used to handle the condition
'ex_condition_post_id_callback',
// Condition Category: Default ones are Archive, Author, Other, Post, User
'Post'
);
}
/**
* Callback function to handle the condition.
* @param mixed $value Input value - in this case, ID of a Post entered by the user.
* @param string $operator Comparison operator selected by the user.
*
* @return boolean true or false.
*/
function ex_condition_post_id_callback( $value, $operator ) {
$current_post_id = get_the_ID();
// return the integer value of $value
$value = intval( $value );
return oxy_condition_eval_int( $current_post_id, $value, $operator );
}
Note:
$oxy_condition_operators['int'] = array( '==', '!=', '>=', '<=', '>', '<' )
$oxy_condition_operators['string'] = array( '==', '!=', 'contains', 'does not contain' )
$oxy_condition_operators['simple'] = array( '==', '!=' )
Screencasts on Conditions
References
https://wpaustralia.slack.com/archives/C054S58MK/p1562317221304500