主题切换后更新后置特效

时间:2014-05-16 作者:charles

切换主题时,我正在尝试更新Posteta表。我正在将元值更新为模板名称。主题名称。php。

然而,这只适用于wordpress中的默认主题。

如果我去添加一个新主题,并激活它,它将不起作用。

元值更新正确,但新主题将覆盖自定义模板。

这是我的密码。

    <?php
    add_action(\'after_switch_theme\', \'update_templates\');

    function update_templates() {

    global $wpdb;
    $new_template = "pl-template.". strtolower(trim(get_current_theme())) .".php";
    $pl_pages = $wpdb->get_results(" SELECT * FROM {$wpdb->prefix}posts WHERE pevo_page = 1");


    foreach ( $pl_pages as $pages) {

        $post_id = $pages->ID;

        $wpdb->query(  
            "
                UPDATE {$wpdb->prefix}postmeta
                SET meta_value = \'$new_template\'
                WHERE post_id = $post_id                         
            "
         );

    }
}
    ?>
自定义模板现在为空,只显示页面标题

    <?php
    /*
     Template Name: Template Name
    */


    $the_title = get_the_title();

    echo $the_title;
   ?>
工作代码由于答案,我使用了一个数组,因为它在我的插件类中。

    add_filter( \'template_include\', array($this, \'plugin_page_templates\')); 


          function plugin_page_templates() {
    global $wpdb;
    $pagename = get_the_title();
    $ispluginpage = $wpdb->get_var("SELECT plugin_page FROM {$wpdb->prefix}posts WHERE post_title = \'$pagename\'");

    if ($ispluginpage == 1) {
        return plugin_dir_path( __FILE__ ) . \'includes/plugin-template.php\';
    }

    return $template;
          }

1 个回复
SO网友:s_ha_dum

我猜你可能在主题中有你的代码functions.php. 该代码仅在主题处于活动状态时加载,并且after_switch_theme 仅在主题更改后运行。没有before_switch_theme 我知道的。

您需要在插件或mu插件文件中包含此代码,才能使其适用于所有主题。

But don\'t...

这种模板劫持将使您所做的任何事情都非常不受欢迎。更不用说这是一种非常混乱的做事方式。您正在更改最终必须再次清理的数据库值。

虽然现在还不清楚你为什么要这样做,甚至不清楚最终的结果应该是什么,但我很确定他们正确的方法是template_include 和/或template_redirect 挂钩。

有关用法示例:

https://wordpress.stackexchange.com/search?q=user%3A21376+template_include
https://wordpress.stackexchange.com/search?q=user%3A21376+template_redirect

结束

相关推荐

为什么我的定制函数不是从我的unctions.php文件开始的?

我们希望清理一些WordPress URL,并按照以下格式进行一些重写:实际URL:产品一/产品一指南/实际URL:产品二/产品二指南/重写URL:产品一/指南/重写URL:产品二/指南/这允许我们在不同的产品中使用相同的子文件夹名称。(无重复的slug问题)总之,我在函数中有一个函数。实现此功能的php:// URL replaces function updateToPerfectURLs($content) { $new_content = $content;&#x