如何在Wordpress中的另一个简码中使用简码的输出?

时间:2019-07-17 21:09:48

标签: html wordpress

我已经编写了一个返回包含在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 &amp; 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 &amp; 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(); ?>

1 个答案:

答案 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