I've noticed that several plugins use the placeholder (%%) when placing content into a page. never actually used this before and was wondering if there's any relevant documentation to show me the process of using it.
Thanks
It's plugin specific, so you can read it in the plugin documentation. Usually it's something like (% plugin name %) or (% plugin name + parameter %)
For example I18N Gallery:
(% gallery name=my-gallery-name %)
So this is (% gallery %) + the name of your gallery, for example a gallery called flowers:
(% gallery name=flowers %)
(2019-02-27, 23:10:42)datiswous Wrote: [ -> ]It's plugin specific, so you can read it in the plugin documentation. Usually it's something like (% plugin name %) or (% plugin name + parameter %)
For example I18N Gallery:
(% gallery name=my-gallery-name %)
So this is (% gallery %) + the name of your gallery, for example a gallery called flowers:
(% gallery name=flowers %)
Thanks for the reply, I must keep missing it as I don't see any ref to ShortCode in the docs .
much appreciated.
What plugin? Or is it your own plugin you make?
(2019-04-23, 06:56:30)datiswous Wrote: [ -> ]What plugin? Or is it your own plugin you make?
It's an idea for a plug-in I'd like to make. I'd really like to know exactly how the process works. For example if I had a contact form or any content (even just a simple div with some text in it ) that I wanted to display in one of the pages. I would like the user to be able to use the process of adding (%whatever%) on any created page to display the form (or any content that I specify.)
Hope I've explained that clearly enough for you. I actually thought at first it was through adding a filter but I'm not sure on it. I've looked at several plugins to see if I could gain any information on how the process works (i18n gallery, po1 contact form).
Thanks
(2019-04-23, 08:05:04)craiga Wrote: [ -> ] (2019-04-23, 06:56:30)datiswous Wrote: [ -> ]What plugin? Or is it your own plugin you make?
It's an idea for a plug-in I'd like to make. I'd really like to know exactly how the process works. For example if I had a contact form or any content (even just a simple div with some text in it ) that I wanted to display in one of the pages. I would like the user to be able to use the process of adding (%whatever%) on any created page to display the form (or any content that I specify.)
Hope I've explained that clearly enough for you. I actually thought at first it was through adding a filter but I'm not sure on it. I've looked at several plugins to see if I could gain any information on how the process works (i18n gallery, po1 contact form).
Thanks
Maybe this can help you.
PHP Code:
add_filter('content','some_names');
In this example I use a table
PHP Code:
function some_names($content) {
$xml = getXML(dpeventGSCONTENT);
$settings = getXML(dpeventGSSETTINGS);
$dateformat = $settings->dateformat;
$out ='<table class="event-content">
<thead>
<tr>
<th>Event</th>
<th colspan="3" style="text-align:center;">Date</th>
<th>Content</th>
<th>Color</th>
</tr>
</thead>';
foreach ($xml->event as $event)
{
$ids = $event['id'];
$name = $event->name;
$startdate = $event->startdate;
$enddate = $event->enddate;
$color = $event->color;
$url = $event->url;
$content = $event->content;
// start content
$out .='<tr>';
if((string)$url ==='') {
$out .='<td>'.$name.'</td>';
} else {
$out .='<td><a href="'.$url.'">'.$name.'</a></td>';
} // end else
$out .='<td>'.date($dateformat,strtotime($startdate)).'</td>';
if((string)$enddate ==='') {
$out .= '<td>No date</td>';
} else {
$out .= '<td>'.date($dateformat,strtotime($enddate)).'</td>';
} // end else
if((string)$content ==='') {
$out .= '<td>NO Content</td>';
} else {
$out .= '<td style="max-width:400px;background:red;">'.$content.'</td>';
} // end else
$out .= '<td style="max-width:400px;background:red;">'.$url.'</td>
<td><div style="width:17px;height:17px;border-radius:3em;background-color:'.$color.'"></div></td>
</tr>';
} // foreach
$out .= '</table>';
// end content
$regex = '(%whatever%)'; // this is what you need
$content = str_replace($regex, $out, $content);
return $content;
}
That's brilliant.
Thank you very much.
I'll try that today
Ahhhh, I get it now:
Really appreciate your help
In the hope this helps others:
PHP Code:
add_filter('content','content_test');
function content_test($content){
$regex = '(%whatever%)'; // add this (%whatever%) to your page to include content
$out = "whatever content- it works!!!";
$content = str_replace($regex, $out, $content);
return $content;
}
Using the add_filter() function
==================================
From the docs section:
http://get-simple.info/wiki/plugins:hooks_filters
'content' Will allow you to alter or filter the $content variable.
The function that you pass $content to should then return your results back to the system.
In other words
My interpretation is as follows:
When you use a filter and specify (content,function call) then
the content variable is passed to that function so make sure you include a param variable in your function description.
Once the function searches for the placeholder and replaces the placeholder with your content
then we return the new value back to the filter using the return method.
Big thanks to :
smdp-1971 for the example. It really helped.
(I've tweaked the original example so it just outputs something simple.)
This is what I wrote to do this
PHP Code:
function getExpansion($trigger,$contents,$noargs = false){
// todo: get lookaheads and lookbehind implemented so you can put non executing code in pages for examples.
// $lookb = "<code>";
// $looka = "</code>";
// $pattern = "/(?<!".$lookb.")\(%\s*(".$trigger.")(\s+(?:%[^%\)]|[^%])+)?\s*%\)(?!".$looka.")/";
// $pattern = "/(?<=".$look.")\(%\s*(".$trigger.")(\s+(?:%[^%\)]|[^%])+)?\s*%\)(?=".$look.")/";
$pattern = "/\(%\s*(".$trigger.")(\s+(?:%[^%\)]|[^%])+)?\s*%\)/";
if(preg_match($pattern,$contents,$matches)){
# echo "<h2>Trigger was Found</h2>"; print_r($matches);
if(!empty($matches[2]) && !$noargs){
// get arguments
# echo "<h2>Trigger has arguments</h2>";
return array(true,'args'=>get_args(trim($matches[2])) );
}
else
{
return array(true);
}
}
}
function get_args($str){
/*
Gets key value pairs from a string
pairs are deimited by space
values can be defined as either
key=value_no_spaces
key='value spaces'
key = "value spaces"
key
* spaces in the pair assigment do not matter
*/
// TODO: make delimiters variable
$regex = <<<EOD
/(?J)(?:(?P<key>\w+)\s*\=\s*["'](?P<value>[^"']*(?:["']{2}[^"']*)*)["']) | (?:(?P<key>\w+)\s*\=\s*(?<value>[^"'\s]*)) | (?:(?P<key>\w+)\s*)/ix
EOD;
$args = Array();
preg_match_all($regex,$str,$argsraw,PREG_SET_ORDER);
if($argsraw){
$cnt = count($argsraw);
for($i=0;$i<$cnt;$i++){
# echo $argsraw[$i]['key'] . " = " . $argsraw[$i]['value'] . "<br>";
$args[strtolower($argsraw[$i]['key'])] = $argsraw[$i]['value'];
}
}
return $args;
}
(2019-04-26, 02:46:42)shawn_a Wrote: [ -> ]This is what I wrote to do this
PHP Code:
function getExpansion($trigger,$contents,$noargs = false){
// todo: get lookaheads and lookbehind implemented so you can put non executing code in pages for examples.
// $lookb = "<code>";
// $looka = "</code>";
// $pattern = "/(?<!".$lookb.")\(%\s*(".$trigger.")(\s+(?:%[^%\)]|[^%])+)?\s*%\)(?!".$looka.")/";
// $pattern = "/(?<=".$look.")\(%\s*(".$trigger.")(\s+(?:%[^%\)]|[^%])+)?\s*%\)(?=".$look.")/";
$pattern = "/\(%\s*(".$trigger.")(\s+(?:%[^%\)]|[^%])+)?\s*%\)/";
if(preg_match($pattern,$contents,$matches)){
# echo "<h2>Trigger was Found</h2>"; print_r($matches);
if(!empty($matches[2]) && !$noargs){
// get arguments
# echo "<h2>Trigger has arguments</h2>";
return array(true,'args'=>get_args(trim($matches[2])) );
}
else
{
return array(true);
}
}
}
function get_args($str){
/*
Gets key value pairs from a string
pairs are deimited by space
values can be defined as either
key=value_no_spaces
key='value spaces'
key = "value spaces"
key
* spaces in the pair assigment do not matter
*/
// TODO: make delimiters variable
$regex = <<<EOD
/(?J)(?:(?P<key>\w+)\s*\=\s*["'](?P<value>[^"']*(?:["']{2}[^"']*)*)["']) | (?:(?P<key>\w+)\s*\=\s*(?<value>[^"'\s]*)) | (?:(?P<key>\w+)\s*)/ix
EOD;
$args = Array();
preg_match_all($regex,$str,$argsraw,PREG_SET_ORDER);
if($argsraw){
$cnt = count($argsraw);
for($i=0;$i<$cnt;$i++){
# echo $argsraw[$i]['key'] . " = " . $argsraw[$i]['value'] . "<br>";
$args[strtolower($argsraw[$i]['key'])] = $argsraw[$i]['value'];
}
}
return $args;
}
Nice one. I have to admit that even after several years coding, I still don't utilise REGEX half as much as I should.
I avoid it at all costs, it is pretty expensive and should not be used when string operations will do