Posts: 116
Threads: 38
Joined: Sep 2017
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
Posts: 1,247
Threads: 82
Joined: Feb 2011
2019-02-27, 23:10:42
(This post was last modified: 2019-02-27, 23:14:30 by datiswous.)
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 %)
Posts: 116
Threads: 38
Joined: Sep 2017
2019-03-01, 22:49:39
(This post was last modified: 2019-03-01, 23:25:44 by craiga.)
(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.
Posts: 116
Threads: 38
Joined: Sep 2017
(2019-03-01, 22:49:39)craiga Wrote: (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. . . . .
Still no joy . . . is anyone able to provide some help please. I've searched high and low and can't find any docs on creating the placeholders. I need to display some content from the back end in the front when the plugin is installed and wanted to use % whatevername %
Thanks
Posts: 1,247
Threads: 82
Joined: Feb 2011
2019-04-23, 06:56:30
(This post was last modified: 2019-04-23, 06:58:22 by datiswous.)
What plugin? Or is it your own plugin you make?
Posts: 116
Threads: 38
Joined: Sep 2017
(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
Posts: 44
Threads: 8
Joined: May 2014
(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; }
Posts: 116
Threads: 38
Joined: Sep 2017
2019-04-23, 17:18:40
(This post was last modified: 2019-04-23, 20:02:54 by craiga.)
That's brilliant.
Thank you very much.
I'll try that today
Ahhhh, I get it now:
Really appreciate your help
Posts: 116
Threads: 38
Joined: Sep 2017
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.)
Posts: 44
Threads: 8
Joined: May 2014
(2019-04-23, 17:18:40)craiga Wrote: That's brilliant.
Thank you very much.
I'll try that today
Ahhhh, I get it now:
Really appreciate your help
I'm glad I can help.
Enjoy!
Posts: 6,266
Threads: 181
Joined: Sep 2011
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; }
Posts: 116
Threads: 38
Joined: Sep 2017
(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.
Posts: 6,266
Threads: 181
Joined: Sep 2011
I avoid it at all costs, it is pretty expensive and should not be used when string operations will do
|