如何以编程方式将值添加到Wordpress模板文件?

时间:2014-06-10 06:23:29

标签: php wordpress templates wordpress-plugin

我是Wordpress&的新手。 PHP,请原谅这个问题的天真,如果有的话。

我正在构建一个插件,我需要从数据库中选择值并使用值创建一个新的HTML页面。我正在使用自定义模板文件。

到目前为止我做了什么

  1. 从数据库中提取值

  2. Load&在我的插件文件中显示我自己的模板

  3. add_action( 'init', 'leb_add_endpoint' );
    
    function leb_add_endpoint()
    {
        add_rewrite_endpoint( 'result', EP_PERMALINK );
    }
    
    add_action( 'template_include', 'leb_render_template' );
    
    function leb_render_template($default_template) {
          //some code removed for brevity
          if ( ! is_singular() || !isset($wp_query->query_vars['result']) )
          {
             return $default_template;
          }
    
          $sample_result = $wpdb->get_var($wpdb->prepare($sql));
    
          $default_template = plugin_dir_path(__FILE__) . '/my-custom-template.php';
    
          return $default_template;
    }
    

    my-custom-template.php的内容如下

    <?php
    /* Template Name: My Template*/
    
    echo '<h1>Testing</h1>';
    
    ?>
    

    页面显示没有任何问题。我想要的只是将$sample_result和其他类似结果从数据库中插入my-custom-template.php

    我需要根据从DB中提取的值生成动态页面。所以每次创建的最终页面可能都不同。例如。如果有人点击www.example.com/sample-post/result,则会显示一个页面,其中包含从数据库中提取的值。如果有人点击www.example.com/another-sample-post/result,则会显示不同的页面,其中包含不同的值。这两个页面都具有相同的设计,只有少数几个值不同。这就是我想要实现的目标。

    我该怎么做?请帮我。我被卡住了。 :(

3 个答案:

答案 0 :(得分:2)

那么为什么不在 my-custom-template.php < my-custom-template.php 中使用 $ wp_query / p>

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

    global $wp_query;
    echo '<pre>';
    print_r($wp_query); // Use this in case you want to see what else do you have with you.
    echo '<pre/>';
    // Now you can use $wp_query to build your dynamic query at run time.
    // This will allow you to perform task at run time

?>

检索Meta

如果您已将某些内容保存为元

<?php
     $meta_values = get_post_meta( $post_id, $key, $single );
?>

检索子帖子

如果您想检索子帖,那么

<?php 
    if ( have_posts() ) :

        // Start the Loop.
        while ( have_posts() ) : the_post();
            // Do your stuff here such as below
            the_title();
            the_content();

        endwhile;
    else:
        echo 'No Post Found';
    endif;
?>

答案 1 :(得分:1)

  1. 您需要在查询变量中定义“结果”。
  2. 使用EP_ROOT端点掩码(结果/ {var}位于根目录中)
  3. 在template_include hook中,您可以在$ wp_query对象中找到结果值。
  4. 我已经测试了代码

    // Add a new var to query vars
    function result_add_query_vars( $vars ){
        $vars[] = 'result';
        return $vars;
    }
    add_filter( 'query_vars', 'result_add_query_vars' );
    
    // Add endpoint
    function result_add_endpoint() {
        add_rewrite_endpoint( 'result', EP_ROOT );
    }
    add_action( 'init', 'result_add_endpoint');
    
    // change the template
    function result_render_template($template)
    {
        global $wp_query;
    
         if ( array_key_exists( 'result', $wp_query->query_vars ) ) {
    
            $result = get_query_var('result');
    
            $new_template = plugin_dir_path(__FILE__) . '/my-custom-template.php';
            return $new_template;
    
        } else {
    
            return $template;
    
        }
    }
    add_action( 'template_include', 'result_render_template' );
    

    现在,您可以在自定义模板中检索查询var

    /*
     *  Template Name: My Custom Template
     */
    
    $result = get_query_var('result');
    
    echo $result;
    

答案 2 :(得分:0)

1)在活动模板的function.php中写下此函数。

 function leb_render_template() {
  //some code removed for brevity
   //$sql = 'YOUR_QUERY_CODE'
   $sample_result = $wpdb->get_var($wpdb->prepare($sql));
   return $my_template;   
  }      

 add_action('wp_ajax_leb_render_template', 'leb_render_template');
 add_action('wp_ajax_nopriv_leb_render_template', 'leb_render_template');

2)自定义模板中的调用功能。

    <?php
      /* Template Name: My Template*/
       echo '<h1>Testing</h1>';
      $result = leb_render_template();
      print_r($result); // Print Your function output. 
      ?>