Нужна пользовательская функция, доступная во всем 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');

вызовите его в любом месте темы или плагина: (такой)

  1. редактор wordpress:

    [send-notification token=XXXX message="hello"]
    
  2. темы/плагина файлы:

    <?php echo do_shortcode('[send-notification token=XXXX message="hello"]'); ?>
    

Полезные Ресурсы:

  1. WordPress короткий с Параметры
  2. A учебник на Wordpress шорткоды
  3. Создать Шорткод С различными типами параметров

по данным этот вопрос :
Шаг 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();