【问题标题】:Wordpress: insert same code with different parameters into multiple pagesWordpress:将具有不同参数的相同代码插入多个页面
【发布时间】:2020-09-21 22:01:41
【问题描述】:

我仍然是 Wordpress 新手,所以(希望)这是一个完全愚蠢的问题。

我需要插入相同的嵌入代码(类似这样,它只是从 Tableau Public 上的可视化中复制而来)(...):

<div class='tableauPlaceholder' id='viz1591173837909' style='position: relative'><noscript><a href='http:&#47;&#47;issarfwd.cenia.cz&#47;jihocesky-kraj&#47;ovzdusi&#47;'><img alt=' ' src='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;Kr&#47;Kraje-Ovzdu&#47;Emisnsituace&#47;1_rss.png' style='border: none' /></a></noscript><object class='tableauViz'  style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> <param name='embed_code_version' value='3' /> <param name='path' value='views&#47;Kraje-Ovzdu&#47;Emisnsituace?:embed=y&amp;:toolbar=yes&amp;:embed_code_version=3&amp;Parameters.Kraj=Jiho%C4%8Desk%C3%BD%20kraj&amp;:loadOrderID=0&amp;:display_count=y?:embed%3Dy' /> <param name='toolbar' value='yes' /><param name='static_image' value='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;Kr&#47;Kraje-Ovzdu&#47;Emisnsituace&#47;1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /><param name='filter' value='Parameters.Kraj=Jiho%C4%8Desk%C3%BD%20kraj' /></object></div>                <script type='text/javascript'>                    var divElement = document.getElementById('viz1591173837909');                    var vizElement = divElement.getElementsByTagName('object')[0];                    vizElement.style.width='1024px';vizElement.style.height='850px';                    var scriptElement = document.createElement('script');                    scriptElement.src = 'https://public.tableau.com/javascripts/api/viz_v1.js';                    vizElement.parentNode.insertBefore(scriptElement, vizElement);                </script>

进入一个站点内的几个不同的 Wordpress 页面。每次,嵌入代码都应该有不同的参数。我选择参数作为页面的副标题并想出了这段代码(它有效):

if (is_page()) {
$subtitle = apply_filters( 'plugins/wp_subtitle/get_subtitle', '', array(
   ) );
   if ((strpos($subtitle , 'kraj') == false) && (strpos($subtitle , 'Praha') == false) && (strpos($subtitle , 'Vysočina') == false)) {$subtitle = "Všechny kraje";};
 echo
"<div class='tableauPlaceholder' id='viz1591084101025' style='position: relative'><noscript>
<a href='#'><img alt=' ' src='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;Kr&#47;Kraje-Ovzdu&#47;Emisnsituace&#47;1_rss.png' style='border: none' />
</a></noscript><object class='tableauViz'  style='display:none;'><param name='host_url' value='https%3A%2F%2Fpublic.tableau.com%2F' /> 
<param name='embed_code_version' value='3' /> <param name='path' value='views&#47;Kraje-Ovzdu&#47;Emisnsituace?:embed=y&amp;:display_count=y' />
<param name='filter' value='Parameters.Kraj="  . $query->post->post_title . $subtitle . "'>
 <param name='toolbar' value='yes' /><param name='static_image' value='https:&#47;&#47;public.tableau.com&#47;static&#47;images&#47;Kr&#47;Kraje-Ovzdu&#47;Emisnsituace&#47;1.png' /> <param name='animate_transition' value='yes' /><param name='display_static_image' value='yes' /><param name='display_spinner' value='yes' /><param name='display_overlay' value='yes' /><param name='display_count' value='yes' /></object></div>                <script type='text/javascript'>                    var divElement = document.getElementById('viz1591084101025');                    var vizElement = divElement.getElementsByTagName('object')[0];                 
   vizElement.style.width='1024px';vizElement.style.height='850px';                    var scriptElement = document.createElement('script');                    scriptElement.src = 'https://public.tableau.com/javascripts/api/viz_v1.js';                    vizElement.parentNode.insertBefore(scriptElement, vizElement);                </script>";}?> ```

嵌入代码(=上面的引号)很乱,所以只是为了突出我在其中更改的单一内容:

&lt;param name='filter' value='Parameters.Kraj=" . $query-&gt;post-&gt;post_title . $subtitle . "'&gt;

我想在页面模板中插入类似上面的内容,这样我就不必将稍微更改的代码单独插入每个页面。

问题是:我应该从哪里加载嵌入代码?如果它发生变化,我希望人们能够从管理区域对其进行编辑。这应该是一个地方:用户将其粘贴到那里 → 它被页面模板读取 → 代码在具有此模板的任何页面中都被更改。这可以从一个不会公开的页面上完成吗?还有其他提示吗?

非常感谢!

【问题讨论】:

  • 听起来你想创建一个带参数的简码:codex.wordpress.org/Shortcode_API
  • 您是否安装了 ACF 字段?您可以在那里使用选项页面字段,然后使用简码查看其中的值,当它拉入时。很高兴提供示例,但需要知道您是否可以/已经安装 ACF
  • @UnbrandManchester 它让我使用短代码,但是具有 php 知识的人需要编辑嵌入代码,不是吗?不过,我需要这部分对用户非常友好。我没有安装 ACF 字段,我还没有完全了解您将如何使用它,但我肯定会尝试查看它。同时,如果您想详细说明一下,将不胜感激:)
  • ACF 选项页面是您为嵌入代码的可编辑位放置一个字段的地方,从那里您将拥有一个您创建的短代码,它从 ACF 选项页面获取该字段(在 @ 中描述FloJDM 答案)并使用它来创建完整嵌入的输出。这更有意义吗? -- 这整个方法意味着任何老的非开发人员都可以编辑嵌入代码的可编辑部分,而短代码则负责所有棘手的部分。

标签: php html wordpress custom-wordpress-pages


【解决方案1】:

您可以使用 ACF for WP 创建选项页面:

add_action('acf/init', 'register_my_options_pages');

function register_my_options_pages() {

    if( !function_exists('acf_add_options_page') )
        return;

    $option_page = acf_add_options_page(array(
        'page_title'    => __('Settings page'),
        'menu_title'    => __('Settings page'),
        'menu_slug'     => 'my-general-settings',
        'capability'    => 'edit_posts',
        'redirect'      => false
    ));
}

点击此链接可逐步了解用法: https://www.advancedcustomfields.com/add-ons/options-page/

【讨论】:

  • 感谢您向我指出 ACF,这正是我所需要的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 2022-11-07
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
相关资源
最近更新 更多