我已经编写了一个返回包含在php文件中设置的变量的简码,并且我需要在另一个从插件“插入页面”获得的简码中使用该变量的值。我了解我无法执行[insert page ='[left]'display ='content'],因为Wordpress解析器在第一个]处结束了简码,但是我想知道是否有解决办法。
这是我页面的代码,对于缩进不良表示歉意。我的php文件中的简码是[right]和[left],它们返回与用户选择的选项值相对应的数字。另一个简码来自“插入页面”插件,并以所需的ID作为显示页面的值。
有问题的代码在第一个“选择”标签下方。 143380是一个值的示例,这是我需要输入简码结果的地方。
<form id="form" action="" method="get">
[one_half]
<h3>Select a Country</h3>
<div class="dropdown"><select id="dropdownl" name="dropdownl">
<option disabled="disabled">Country</option>
<option disabled="disabled">North America</option>
<option value="62292">Canada</option>
<option value="72808">Mexico</option>
<option value="144586">Puerto Rico</option>
<option value="163668">United States</option>
<option disabled="disabled">South America</option>
<option value="63839">Argentina</option>
<option value="67922">Brazil</option>
<option value="78702">Colombia</option>
<option value="60670">Peru</option>
<option disabled="disabled">Oceania</option>
<option value="32137">Australia & New Zealand</option>
<option disabled="disabled">Africa</option>
<option value="63210">Egypt</option>
<option value="78700">South Africa</option>
<option disabled="disabled">Asia</option>
<option value="66137">China</option>
<option value="49932">India</option>
<option value="40308">Israel</option>
<option value="78709">Japan</option>
<option value="223252">Philippines</option>
<option value="60438">Republic of Korea</option>
<option value="69605">Singapore</option>
<option value="70391">Taiwan</option>
<option value="71971">Thailand</option>
<option disabled="disabled">Europe</option>
<option value="32142">Austria</option>
<option value="32146">Belgium</option>
<option value="78707">Bulgaria</option>
<option value="72763">Czech Republic</option>
<option value="31277">Denmark</option>
<option value="62393">Finland</option>
<option value="31223">France</option>
<option value="31026">Germany</option>
<option value="63208">Greece</option>
<option value="63016">Hungary</option>
<option value="183519">Ireland</option>
<option value="122492">Italy</option>
<option value="142792">Lithuania</option>
<option value="162411">Netherlands</option>
<option value="67164">Norway</option>
<option value="56320">Poland</option>
<option value="62344">Portugal</option>
<option value="67210">Romania</option>
<option value="68895">Russian Federation</option>
<option value="143380">Serbia</option>
<option value="78705">Slovakia</option>
<option value="25372">Spain</option>
<option value="25520">Sweden</option>
<option value="25408">Switzerland</option>
<option value="67375">Turkey</option>
<option value="63212">Ukraine</option>
<option value="25482">United Kingdom</option>
</select></div>
[left]
[insert page='143380' display='content']
[/one_half]
[one_half_last]
<h3>Select a Country</h3>
<div class="dropdown">
<select id="dropdownr" name="dropdownr">
<option disabled="disabled">Country</option>
<option disabled="disabled">North America</option>
<option value="62292">Canada</option>
<option value="72808">Mexico</option>
<option value="144586">Puerto Rico</option>
<option value="163668">United States</option>
<option disabled="disabled">South America</option>
<option value="63839">Argentina</option>
<option value="67922">Brazil</option>
<option value="78702">Colombia</option>
<option value="60670">Peru</option>
<option disabled="disabled">Oceania</option>
<option value="32137">Australia & New Zealand</option>
<option disabled="disabled">Africa</option>
<option value="63210">Egypt</option>
<option value="78700">South Africa</option>
<option disabled="disabled">Asia</option>
<option value="66137">China</option>
<option value="49932">India</option>
<option value="40308">Israel</option>
<option value="78709">Japan</option>
<option value="223252">Philippines</option>
<option value="60438">Republic of Korea</option>
<option value="69605">Singapore</option>
<option value="70391">Taiwan</option>
<option value="71971">Thailand</option>
<option disabled="disabled">Europe</option>
<option value="32142">Austria</option>
<option value="32146">Belgium</option>
<option value="78707">Bulgaria</option>
<option value="72763">Czech Republic</option>
<option value="31277">Denmark</option>
<option value="62393">Finland</option>
<option value="31223">France</option>
<option value="31026">Germany</option>
<option value="63208">Greece</option>
<option value="63016">Hungary</option>
<option value="183519">Ireland</option>
<option value="122492">Italy</option>
<option value="142792">Lithuania</option>
<option value="162411">Netherlands</option>
<option value="67164">Norway</option>
<option value="56320">Poland</option>
<option value="62344">Portugal</option>
<option value="67210">Romania</option>
<option value="68895">Russian Federation</option>
<option value="143380">Serbia</option>
<option value="78705">Slovakia</option>
<option value="25372">Spain</option>
<option value="25520">Sweden</option>
<option value="25408">Switzerland</option>
<option value="67375">Turkey</option>
<option value="63212">Ukraine</option>
<option value="25482">United Kingdom</option>
</select></div>
[right]
[/one_half_last]
<input type="submit" value="Submit" />
</form>
这是我写的简码模板php文件。它们在left_shortcode和right_shortcode中定义。该文件基于我主题的page.php:
<?php
/*
Template Name: Deven Template
*/
?>
<?php
/**
* The template for displaying pages
*
* This is the template that displays all pages by default.
* Please note that this is the WordPress construct of paages and that
* other "pages" on your WordPress site will use a different template.
*
* @package WordPress
* @subpackage Twenty_Sixteen
* @since Twenty Sixteen 1.0
*/
get_header(); ?>
<?php
$left = "";
$right = "";
?>
<?php
if(isset($_GET['dropdownl']) and isset($_GET['dropdownr'])) {
global $left, $right;
$left = $_GET['dropdownl'];
$right = $_GET['dropdownr'];
//echo $left;
}
?>
<?php
function left_shortcode( $atts, $content = null ) {
global $left; // if $unique is global var add this line too
return $left;
}
add_shortcode( 'left', 'left_shortcode' );
?>
<?php
function right_shortcode( $atts, $content = null ) {
global $right; // if $unique is global var add this line too
return $right;
}
add_shortcode( 'right', 'right_shortcode' );
?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
// Start the loop.
while ( have_posts() ) :
the_post();
// Include the page content template.
get_template_part( 'template-parts/content', 'page' );
// If comments are open or we have at least one comment, load up the comment template.
if ( comments_open() || get_comments_number() ) {
comments_template();
}
// End of the loop.
endwhile;
?>
</main><!-- .site-main -->
<?php get_sidebar( 'content-bottom' ); ?>
</div><!-- .content-area -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
答案 0 :(得分:0)
这个答案是在reddit上给我的:
“可能可以使用嵌套的简码来工作,但是您可能需要对内容进行两次或类似的处理,我想这不会很简单。
我认为最简单的方法就是创建一个新的简码作为包装,并在其中调用原始的简码。
因此,如果原件是这样的:[original_shortcode page = 1]
您可以这样创建一个:[original_shortcode_new page_alignment ='left']
然后编写一个简码,转义/验证用户输入,然后调用主简码。
本质上:
function original_shortcode_new( $args ) {
$args = shortcode_atts(
array(
'page_alignment' => ''
), $args, 'original_shortcode_new' );
$page_id = '';
if($args['page_alignment'] == 'left' && isset($_GET['dropdownl'])){
$page_id = intval($_GET['dropdownl']);
} else if($args['page_alignment'] == 'right' && isset($_GET['dropdownr'])){
$page_id = intval($_GET['dropdownr']);
}
if(empty($page_id)){
return "<p>Error, bad page</p>";
}
return do_shortcode("[original_shortcode page={$page_id}]");
}
add_shortcode( 'original_shortcode_new', 'original_shortcode_new' );
同样,在执行上述操作时,我会摆脱多余的简码和全局变量,而只在单个简码中使用一些逻辑。”
这是回答上面我的问题的一部分,但是要查看完整的帖子,请单击此处:Reddit Question