135 lines
4.1 KiB
PHP
135 lines
4.1 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Plugin Name: Albërellì
|
||
|
* Plugin URI: https://www.your-site.com/
|
||
|
* Description: linktree-like interface for wordpress
|
||
|
* Version: 0.1
|
||
|
* Author: boyska+pinke
|
||
|
* Author URI: https://www.your-site.com/
|
||
|
**/
|
||
|
|
||
|
define('ALB_LINK_URI', 'links');
|
||
|
|
||
|
/* Render {{{ */
|
||
|
function parse_code($text) {
|
||
|
$links = [];
|
||
|
$regexp = '@^(.*)\s+(https?://.*)$@';
|
||
|
foreach(explode("\n", $text) as $line) {
|
||
|
$ret = preg_match($regexp, rtrim($line, "\n\r"), $matches);
|
||
|
if($ret === false || count($matches) < 3) {
|
||
|
continue;
|
||
|
}
|
||
|
$link = [
|
||
|
'text' => rtrim($matches[1]),
|
||
|
'url' => $matches[2]
|
||
|
];
|
||
|
$links[] = $link;
|
||
|
}
|
||
|
return $links;
|
||
|
}
|
||
|
function alb_request() {
|
||
|
$is_front = get_option('alb_option_front');
|
||
|
$uri = $is_front ? '/' : '/' . ALB_LINK_URI;
|
||
|
if($_SERVER["REQUEST_URI"] == $uri ||
|
||
|
$_SERVER["REQUEST_URI"] == '/' . ALB_LINK_URI
|
||
|
) {
|
||
|
$raw = get_option('alb_option_menucode');
|
||
|
$links = parse_code($raw);
|
||
|
// XXX: fai un foglio di stile e una grafica puffosa
|
||
|
echo '<html><head><link href="' . plugins_url('style.css', __FILE__) . '" rel="stylesheet" />';
|
||
|
echo "</head><body><main>\n";
|
||
|
echo "<header><h1>" . get_bloginfo('name') .
|
||
|
"</h1><small class=\"description\">" . get_bloginfo('description') . "</small></header>";
|
||
|
echo "<div class=\"links\">";
|
||
|
foreach($links as $link) {
|
||
|
echo '<a class="link" href="' . esc_html($link['url']) . '">' . esc_html($link['text']) . "</a>";
|
||
|
}
|
||
|
echo "</div>";
|
||
|
echo "</main></body></html>";
|
||
|
exit();
|
||
|
}
|
||
|
}
|
||
|
add_action('init', 'alb_request');
|
||
|
/* Render }}} */
|
||
|
|
||
|
|
||
|
/* Settings page {{{ */
|
||
|
function alb_settings_menu() {
|
||
|
add_options_page('Modifica menu albero', 'Albero dei link', 'activate_plugins', 'alb_settings', 'alb_settings_render', 5);
|
||
|
}
|
||
|
function alb_register_settings() {
|
||
|
register_setting('alb_options', 'alb_option_menucode', 'alb_validate_options');
|
||
|
register_setting('alb_options', 'alb_option_front', 'alb_validate_options');
|
||
|
add_settings_section('alb_menu', 'Menu', 'alb_settings_section_menu', 'alb_settings');
|
||
|
add_settings_field('alb_menucode', 'Versione testuale del menu', 'alb_settings_field_menucode', 'alb_settings', 'alb_menu');
|
||
|
add_settings_field('alb_front', 'Il menu deve sovrascrivere l\'homepage?', 'alb_settings_field_front', 'alb_settings', 'alb_menu');
|
||
|
}
|
||
|
add_action('admin_init', 'alb_register_settings');
|
||
|
function alb_settings() {
|
||
|
}
|
||
|
function alb_settings_render() {
|
||
|
?>
|
||
|
<h2>Albero dei link</h2>
|
||
|
<form action="options.php" method="post">
|
||
|
<?php
|
||
|
settings_fields('alb_options');
|
||
|
do_settings_sections('alb_settings');
|
||
|
?>
|
||
|
<input name="submit" class="button button-primary" type="submit" value="Save" />
|
||
|
</form>
|
||
|
<?php
|
||
|
}
|
||
|
function alb_settings_section_menu() {
|
||
|
$link = get_site_url();
|
||
|
if(!get_option('alb_option_front')) {
|
||
|
$link .= '/' . ALB_LINK_URI;
|
||
|
}
|
||
|
?>
|
||
|
<div>
|
||
|
Il tuo menu è disponibile all'indirizzo <a href="<?php echo $link; ?>"><?php echo esc_html($link); ?></a>
|
||
|
</div>
|
||
|
<?php
|
||
|
}
|
||
|
function alb_settings_field_menucode() {
|
||
|
$value = get_option('alb_option_menucode');
|
||
|
if($value === false) {
|
||
|
$value = "My website " . get_site_url();
|
||
|
}
|
||
|
|
||
|
?>
|
||
|
<textarea style="width: 100%;" id="alb_option_menucode" name="alb_option_menucode" rows="10" wrap="off" type="text" >
|
||
|
<?php
|
||
|
echo esc_html($value);
|
||
|
?>
|
||
|
</textarea>
|
||
|
<div>
|
||
|
<p>Per ogni link che vuoi aggiungere, scrivi il titolo seguito dall'URL.
|
||
|
Vai a capo dopo ogni link.</p>
|
||
|
|
||
|
<p>Esempio:
|
||
|
<pre>
|
||
|
Il mio utente mastodon https://mastodon.bida.im/@noblogs
|
||
|
Il mio sito preferito https://autistici.org/
|
||
|
Un'ottima enciclopedia https://it.wikipedia.org/
|
||
|
</pre></p>
|
||
|
|
||
|
<p>Le righe vuote (o non valide) vengono ignorate</p>
|
||
|
</div>
|
||
|
<?php
|
||
|
|
||
|
}
|
||
|
|
||
|
function alb_settings_field_front() {
|
||
|
$value = get_option('alb_option_front');
|
||
|
?>
|
||
|
<input type="checkbox" <?php echo $value ? 'checked' : '' ?> name="alb_option_front" id="alb_option_front" />
|
||
|
<?php
|
||
|
}
|
||
|
|
||
|
function alb_validate_options( $input ) {
|
||
|
// XXX: protesta quando ci sono linee non vuote che però hanno errori
|
||
|
return $input;
|
||
|
}
|
||
|
add_action('admin_menu', 'alb_settings_menu');
|
||
|
/* Settings page }}} */
|