/site/ready.php
$wire->addHook('ProcessPageAdd::execute', function($event) {
$process = $event->object;
$event->return .= <<<JS
<script>
document.addEventListener("DOMContentLoaded", function() {
var form = document.querySelector('form#ProcessPageAdd');
if(!form) return;
form.addEventListener('submit', function() {
var titleInput = document.querySelector('input[name="title"]');
if(titleInput && !titleInput.value) {
titleInput.value = 'NotPublished';
}
var nameInput = document.querySelector('input[name="_pw_page_name"]');
if(nameInput && !nameInput.value) {
nameInput.value = 'np-' + Math.floor(Date.now() / 1000);
}
});
});
</script>
JS;
});
Список статей, например, /site/templates/page-category.php
$allPosts = $pages->find('limit=9, template=blog-post, sort=-publish_from, status=published, category='.$page->id.', title!=NotPublished');
Страница публикации, например, /site/templates/blog-post.php
if($user->language->isDefault() && $page->title == 'NotPublished') {
throw new Wire404Exception();
}
Список статей в админке, например, /site/templates/template-parts/dashboard/_dashboard_post_page.php
<a href="<?= $blogPost->editUrl() ?>">
<?php if($blogPost->title == 'NotPublished'): ?>
<strike><?= $blogPost->title ?></strike>
<?php else: ?>
<?= $blogPost->title ?>
<?php endif;?>
<?php
$title_en=$blogPost->getLanguageValue('en', 'title');
if($title_en!=$blogPost->title){
echo '<br/>'.$title_en;
}
?>
</a>
Удалить непечатаемые символы
$item['content']=preg_replace('/[[:cntrl:]]/','',$item['content']);
Еще вариант
$item['content']=preg_replace('/[\x00-\x1F\x7F]/','',$item['content']);
Оставить перенос строк \r и \n
$item['content']=preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/','',$item['content']);
https://stackoverflow.com/questions/1497885/remove-control-characters-from-php-string
Также в случае отсутствия gclid и utm определять источник по $_SERVER[‘HTTP_REFERER’] учитывая домены поисковых систем.
$seo_params=array('ga_cid','gclid','utm_source','utm_medium','utm_campaign','utm_content','utm_term');
$seo_cookies=$seo_cookies_default=array();
foreach($seo_params as $sp){
switch($sp){
case 'gclid':
$seo_cookies_default[$sp]='NULL';
break;
case 'utm_source':
$seo_cookies_default[$sp]='direct';
break;
default:
$seo_cookies_default[$sp]='none';
break;
}
}
$update_cookies=false;
if(isset($_GET['gclid'])&&$_GET['gclid']!=''){
$update_cookies=true;
foreach($seo_params as $sp){
switch($sp){
case 'gclid':
$seo_cookies[$sp]=$_GET[$sp];
break;
case 'utm_source':
$seo_cookies[$sp]='google';
break;
case 'utm_medium':
$seo_cookies[$sp]='cpc';
break;
default:
if(stristr($sp,'utm_')&&isset($_GET[$sp])&&$_GET[$sp]!=''){
$seo_cookies[$sp]=$_GET[$sp];
}
else{
$seo_cookies[$sp]='none';
}
break;
}
}
}
else{
$is_utm=false;
foreach($seo_params as $sp){
if(stristr($sp,'utm_')&&isset($_GET[$sp])&&$_GET[$sp]!=''){
$seo_cookies[$sp]=$_GET[$sp];
$is_utm=true;
$update_cookies=true;
}
else{
$seo_cookies[$sp]='none';
}
}
if(!$is_utm){
$referer=$_SERVER['HTTP_REFERER'];
if($referer!=''){
$parse_referer=parse_url($referer);
$referer_domain=$parse_referer['host'];
if($referer_domain!=''&&$referer_domain!=$_SERVER['HTTP_HOST']){
$update_cookies=true;
$organics=array('google','yandex','bing');
$is_organic=false;
foreach($organics as $organic){
if(stristr($referer_domain,$organic)){
$is_organic=true;
foreach($seo_params as $sp){
switch($sp){
case 'utm_source':
$seo_cookies[$sp]=$organic;
break;
case 'utm_medium':
$seo_cookies[$sp]='organic';
break;
default:
if(stristr($sp,'utm_')){
$seo_cookies[$sp]='none';
}
break;
}
}
}
}
if(!$is_organic){
foreach($seo_params as $sp){
switch($sp){
case 'utm_source':
$seo_cookies[$sp]=$referer_domain;
break;
case 'utm_medium':
$seo_cookies[$sp]='referral';
break;
default:
if(stristr($sp,'utm_')){
$seo_cookies[$sp]='none';
}
break;
}
}
}
}
}
}
}
if($_COOKIE['_ga']!=''){
$ga_cookie_split=explode('.',$_COOKIE['_ga']);
if($ga_cookie_split[2]&&$ga_cookie_split[3]){
$ga_cid=$ga_cookie_split[2].'.'.$ga_cookie_split[3];
$seo_cookies['ga_cid']=$ga_cid;
}
}
foreach($seo_params as $sp){
if($update_cookies||!isset($_COOKIE['local_'.$sp])||$sp=='ga_cid'){
$cv=($seo_cookies[$sp]!='')?$seo_cookies[$sp]:$seo_cookies_default[$sp];
setcookie('local_'.$sp,$cv,time()+31536000,'/',$_SERVER['HTTP_HOST']);
$_COOKIE['local_'.$sp]=$cv;
}
}
function add_seo_params_to_letter(){
global $seo_params;
$text='<hr/>';
foreach($seo_params as $sp){
$text.=$sp.': '.$_COOKIE['local_'.$sp]."<br/>";
}
return $text;
}
Функция add_seo_params_to_letter используется для добавления в письма сохраненных данных.
Например в modx:
// /core/components/formit/model/formit/fihooks.class.php
public function email(array $fields=array()){
// ...
$message.=add_seo_params_to_letter();
// ...
}
Для работы сайта на 2 доменах одновременно без переадресации в wp-config.php
if($_SERVER['HTTP_HOST']=='krylov.eu.org'){
define('WP_SITEURL','https://krylov.eu.org');
define('WP_HOME','https://krylov.eu.org');
}
else{
define('WP_SITEURL','https://krylov.org.ua');
define('WP_HOME','https://krylov.org.ua');
}
RSA-подпись SHA-512 hash от строки $text
Алгоритм создания и проверки подписи: SHA512withRSA
$private_key='<<<EOD
-----BEGIN RSA PRIVATE KEY-----
'.PRIVATE_KEY.'
-----END RSA PRIVATE KEY-----
EOD';
$signature='';
openssl_sign($text,$signature,$private_key,'SHA512');
$data=array(
'signature'=>base64_encode($signature),
);
использовать get_stylesheet_directory_uri() вместо get_template_directory_uri()