Нужна пользовательская функция, доступная во всем WordPress
У меня есть эта функция уведомления и ее нужно вызывать в разных местах кода. Мне нужно поместить его туда, куда будут доступны любые файлы внутри моей дочерней темы, а также в каталог плагинов.
function send_notification($tokens, $message)
{
$url = 'https://fcm.googleapis.com/fcm/send';
$fields = array(
'registration_ids' => $tokens,
'data' => $message
);
$headers = array(
'Authorization:key = My_Token',
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
return $result;
}
- первый вопрос, где его поставить, в настоящее время он находится в функциях.РНР?
- второй вопрос, как называют его в разных местах?
любые решение и ссылка будут оценены. Спасибо.
4 ответов
вот решение: каждая вещь комментируется на каждой строке
function do_something( $a = "", $b = "" ) { // create your function
echo '<code>';
print_r( $a ); // `print_r` the array data inside the 1st argument
echo '</code>';
echo '<br />'.$b; // echo linebreak and value of 2nd argument
}
add_action( 'danish', 'do_something', 10, 2 );
// create your own action with params('action name', 'callback funtion', priority, num_of params)
затем крючком везде нужно
$a = array(
'eye patch' => 'yes',
'parrot' => true,
'wooden leg' => 1
);
$b = __( 'And Hook said: "I ate ice cream with Peter Pan."', 'textdomain' );
// Executes the action hook named 'danish'
do_action('danish', $a, $b);
вот именно.
поскольку у вас есть функция с широкой областью, подумайте о том, чтобы дать ей более уникальное имя, чтобы предотвратить конфликты имен, такие как просто send_notification
, или если вы можете - попробуйте использовать пространство имен или класс.
теперь, чтобы ответить на ваш вопрос,functions.php
на самом деле обычно является безопасной ставкой для функций "широкой области", которые должны быть доступны практически в любом месте. Если вы посмотрите на Ссылка На Действие вы увидите, что after_setup_theme
запускается относительно рано, позволяя вашей функции быть доступной с этого крючка или позже - так как она будет доступна в этот момент. Однако это происходит после plugins_loaded
, поэтому, если вам это нужно до этого, вам нужно будет превратить его в плагин с Заголовочный Файл или "плагин MU".
Если вам нужно, чтобы он был доступен в самом раннем momement, подумайте о том, чтобы поместить его в файл в /wp-content/mu-plugins/
и дать ему имя, даже что-то вроде custom-functions.php
. Эти файлы называются Обязательные Плагины. Файлы в этом каталоге всегда загружаются и всегда запускаются раньше всего остального, поэтому объявленные в них функции доступны невероятно рано. Обычно я кладу код, который мне нужно убедиться, что тема независима, всегда включена и не может быть деактивирована.
так эффективно:
1) переименуйте свою функцию в нечто более уникальное, например naser_send_notitification()
2) Поместите этот код в /wp-content/mu-plugins/custom-funtions.php
3) Теперь вы должны быть в состоянии назвать naser_send_notification( $tokens, $message )
в любой функции или крючке, который приходит после muplugins_loaded
крюк (который находится примерно в любом месте)
Я считаю короткие WordPress было бы лучшим подходом к решению этой проблемы. Потому что возиться с файлами ядра wordpress не является хорошей практикой и приводит к нескольким проблемам, таким как удаление кода при обновлении и т. д.
есть несколько преимуществ шорткодов и для вашей конкретной проблемы было бы полезно, потому что:
- можно разместить в родительских / дочерних темах
functions.php
- на
php
файлы кода и в приборной панели редактор также
Полный Код: (просто место внутри functions.php
)
function send_notification( $atts )
{
extract(shortcode_atts(array(
"tokens" => '',
"message" => ''
), $atts));
$url = 'https://fcm.googleapis.com/fcm/send';
$fields = array(
'registration_ids' => $tokens,
'data' => $message
);
$headers = array(
'Authorization:key = My_Token',
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
return $result;
}
add_shortcode('send-notification', 'send_notification');
вызовите его в любом месте темы или плагина: (такой)
-
редактор wordpress:
[send-notification token=XXXX message="hello"]
-
темы/плагина файлы:
<?php echo do_shortcode('[send-notification token=XXXX message="hello"]'); ?>
Полезные Ресурсы:
- WordPress короткий с Параметры
- A учебник на Wordpress шорткоды
- Создать Шорткод С различными типами параметров
по данным этот вопрос :
Шаг 1: напишите свою функцию в класс внутри вашего плагина
Шаг 2: Создайте объект этого класса в вашей теме
Шаг 3: доступ к функции этого объекта.
// inside your plugin
class foo {
public function send_notification() {
return "whatever you want";
}
}
// inside your themes functions.php
$foo_object = new foo();
// use the object to access your function:
$foo_object->send_notification();