繁体   English   中英

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

[英]How to add values to a Wordpress template file programmatically?

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

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

到目前为止我做了什么

  1. 从数据库中提取值

  2. 在我的插件文件中加载并显示我自己的模板

 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 ,则会显示不同的页面,其中包含不同的值。 这两个页面都具有相同的设计,只有少数几个值不同。 这就是我想要实现的目标。

我怎样才能做到这一点? 请帮我。 我被卡住了。 :(

好吧,为什么不在我的my-custom-template.php中使用$ wp_query

<?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. 您需要在查询变量中定义“结果”。
  2. 使用EP_ROOT端点掩码(结果/ {var}位于根目录中)
  3. 在template_include hook中,您可以在$ wp_query对象中找到结果值。

我已经测试了代码

// 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;

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. 
      ?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM