插件内容显示在每个页面上

时间:2016-04-04 作者:DevNik

我写了我的第一个插件,有一个问题,我的插件的内容显示在每个页面上。因此,如果我想打开我的图库,它会显示我的插件内容。

myplugin.php

<?php
/*
 * Plugin Name: Gw2  Event Timer
 * Plugin URI: http://localhost/wordpress
 * Description: T1Ein Guild Wars 2 Timer - beinhaltet alle Weltbosse und die neun HoT Gebiete
 * Version: 1.0
 * Author: Niklas Grieger
 * Author URI: http://localhost/wordpress
 * License: No License
 */
$mm_plugin_basename = plugin_basename( __FILE__ );
function event_timer_head() {
    /**
    rtrim(get_settings(\'siteurl\'), \'/\'): Gibt den Pfast .../wordpress zurück!!!
    **/
    echo "<link href=\'". rtrim(get_settings(\'siteurl\'), \'/\') ."/wp-content/plugins/gw2eventtimer/style.css\' rel=\'stylesheet\' type=\'text/css\' />
    <script type=\'text/javascript\' src=\'". rtrim(get_settings(\'siteurl\'), \'/\') ."/wp-content/plugins/gw2eventtimer/js/js.js\'></script>
    <script type=\'text/javascript\' src=\'http://www.moongate.pl/event-timers/moment.min.js\'></script>

    ";


}

function event_timer_content($content) {
    $content="<div id=\'event-wrapper\' class=\'event-wrapper\'>
    <div class=\'event-limit\'><span class=\'event-limit-text\'>Nächste</span></div>
    <div class=\'event-pointer\'><span class=\'event-pointer-time\'>00:00 UTC</span></div>
    <div style=\'height:10px; width:100%;\'></div>
    </div>";
    return strtolower($content);
}

function event_timer_title($title) {
    $title = str_replace(\' \', \' \', $title);
    return $title;
}
function mh_load_my_script() {
    wp_enqueue_script( \'jquery\' );
}
add_action( \'wp_enqueue_scripts\', \'mh_load_my_script\' );
add_action(\'wp_head\', \'event_timer_head\');
add_filter(\'the_content\', \'event_timer_content\');
add_filter(\'the_title\', \'event_timer_title\');
?>
我想要那个the_contentwp_head 仅当页面处于活动状态时加载。如果你需要更多信息,请告诉我。

谢谢

2 个回复
最合适的回答,由SO网友:Bruno Cantuaria 整理而成

WordPress的操作和过滤器的不同是一个常见的错误。

动作是指除了默认情况外,还希望发生一些事情知道,当您使用某个动作时,您的输出将插入该动作内容中。但当您使用过滤器时,您的输出将替换该过滤器内容。

在过滤器中the_content 您正在用插件内容替换帖子中的所有内容。因此,正确的修复方法是将内容附加到输出中,如$content .= "<div>...</div>";

SO网友:dg4220

我认为最简单的方法是在检查页面后放置调用操作和过滤器挂钩

if ( is_page( 1 ) ) {
    add_action( \'wp_enqueue_scripts\', \'mh_load_my_script\' );
    add_action(\'wp_head\', \'event_timer_head\');
    add_filter(\'the_content\', \'event_timer_content\');
    add_filter(\'the_title\', \'event_timer_title\');
}
其中1是要在其上设置计时器的页面的id。

对于你想要完成的事情来说,这似乎有点过头了。我这样说是因为你的“名字”是WordPress初学者,如果你只想在一个页面上设置计时器,我只想将$内容变量的内容粘贴到一个新的帖子或页面上(确保你选择了编辑器的“文本”选项卡,而不是“视觉”选项卡),并将$标题作为标题。然后register these scripts

<link href=\'". rtrim(get_settings(\'siteurl\'), \'/\') ."/wp-content/plugins/gw2eventtimer/style.css\' rel=\'stylesheet\' type=\'text/css\' />
<script type=\'text/javascript\' src=\'". rtrim(get_settings(\'siteurl\'), \'/\') ."/wp-content/plugins/gw2eventtimer/js/js.js\'></script>
<script type=\'text/javascript\' src=\'http://www.moongate.pl/event-timers/moment.min.js\'></script>
以及enqueue 使用jQuery在这个函数中创建它们

function mh_load_my_script() {
    wp_enqueue_script( \'jquery\' );
    wp_enqueue_script( \'other-script\' );
    wp_enqueue_script( \'other-script1\' );
}
最后

if ( is_page( 1 ) ) {
        add_action( \'wp_enqueue_scripts\', \'mh_load_my_script\' );
}