WordPress :: add_action внутри плагина shortcode

xDan спросил: 28 апреля 2018 в 09:52 в: wordpress

Я пытаюсь сделать вызов add_action, но только на странице, которая содержит специальный код для плагинов.

В настоящий момент я получаю его на всех страницах и не только на странице, которая мне нужна .

class SomePlugin {
  public __construct() {
    add_action('wp_head', array(&$this, 'addMetatags'));
  }  public function addMetatags() {
    echo '<meta property="og:type" content="article" ';
  }
}

3 ответа

Mukesh Panchal ответил: 28 апреля 2018 в 11:37

Попробуйте ввести код

class SomePlugin {
  public function __construct() {
    add_action('wp_head', array($this, 'addMetatags'));
  }  public function addMetatags() {
    if ( is_page( 'about-me' ) ) { 
        echo '<meta property="og:type" content="article">';
    }
  }
}
$SomePlugin = new SomePlugin();
xDan ответил: 28 апреля 2018 в 11:34
Можно ли получить нечто более общее? Так как я знаю, что такое короткий код.
Mukesh Panchal ответил: 28 апреля 2018 в 11:37
У нас есть особые условия страницы, как указано выше
xDan ответил: 28 апреля 2018 в 11:38
Я использовал его, и он работает, но просто скажите, можно ли проверить текущую страницу для текущего активного короткого кода на текущем посту и установить мета. Я не нахожу ничего, чтобы получить эту информацию.
Vikram Sardana ответил: 28 апреля 2018 в 04:21

Просто используйте функцию shortcode_exists.

   <?php
add_action('init','prefix_check_short_code'); function prefix_check_short_code() {
  if ( shortcode_exists( 'your_short_code' ) ) { 
         $SomePlugin = new SomePlugin();
    }
 } 
  ?> 

Используйте этот код в функции темы или основной файл плагина.

URL-адрес функции на веб-сайте Wordpress: https://codex.wordpress.org/Function_Reference/shortcode_exists

xDan ответил: 28 апреля 2018 в 11:26
Это не работает. Плагин всегда зарегистрирован, мне нужно что-то, что приведет к действию, когда в сообщении появится короткий код плагина.
Vikram Sardana ответил: 28 апреля 2018 в 04:23
Я обновил ответ.
xDan ответил: 28 апреля 2018 в 04:59
Это все еще не в порядке, основной проблемой вашего решения является использование shortcode_exists ('your_short_code'), поскольку в его исходном файле проверять все зарегистрированные короткие коды не только на этой странице, но и на всех активных коротких кодах, это приведет к тому, что он будет выполняться всегда.
Есть решение
xDan ответил: 30 апреля 2018 в 06:23

После некоторого diging найдено лучшее (общее) решение для меня:

class somePluginClass {        public function __construct()
    {
       add_action('wp_head', array(&$this, 'renderTags'));
    }    public function renderTags() {
       global $post;
       if (has_shortcode($post->post_content, self::SHORT_CODE)) {
          echo '<meta property="[some-property]" content="[content]" />';
       }
    }}