How do I read a variable declared in WordPress single.php from external PHP file?

-2

I have trouble reading the contents of a variable declared in single.php (index.php of each entry) of the active theme in WordPress, that variable I am invoking from an external PHP file called < strong> generator.php that you create within the same directory of the active topic; this PHP variable called $ links stores the download URLs obtained from the custom Field of each WordPress entry. The file generator.php is responsible for generating download buttons and make some changes to the URL's (which I do not think is relevant to this case, therefore I will not mention).

Thanks in advance for all your cooperation !!

Used Code Based on Example of @brasofilo

single.php

<?php $enlaces = 'Soy Una Variable';?>

generador.php

<?php 
define( 'WP_USE_THEMES', false );
require( $_SERVER['DOCUMENT_ROOT'] .'/wp-load.php' ); // ajustar sí necesário
echo $enlaces;
?>
    
asked by oijm17 10.10.2018 в 15:32
source

2 answers

0

The first one, if you want to show something from one php file in another directly, you have to import that file in the other one as you say to Malbarez, of course in your case it would be:

include_once(__DIR__.'/single.php');

The issue is that from what I see you do not want that, since it would be to pass the ones that you are doing in the file single.php to the file generador.php, what you want is to have access to that variable in some way, in whose case I think you create a session variable for that variable $ links in single.php and then in the file generator.php you get that variable.

single.php

<?php 
  session_start();
  $_SESSION['enlaces'] = 'Soy Una Variable';
?>

generador.php

<?php 
  session_start();

  if(isset($_SESSION['enlaces']))
    print_r($_SESSION['enlaces']);
?>

Greetings.

    
answered by 10.10.2018 в 20:22
0

You can include the generador.php after declaring the variable, for example:

single.php

<?php
/**
 * The template for displaying all single posts
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
 *
 * @package WordPress
 * @subpackage Twenty_Seventeen
 * @since 1.0
 * @version 1.0
 */

get_header(); 

$mivariable = "hola";
include_once(__DIR__.'/generador.php');
?>

generador.php

<pre>
  <?php var_dump($mivariable);?>
</pre>

That includes the generator and prints the value in a pre-formatted block just below the header.

If the wave is generating new content based on the current post and showing it when you click on a button you do not even need an include or a separate file, there are several ways to do it, I transcribe the most "slum programming way" ®:

single.php

<?php
/**
* The template for displaying all single posts
*
* @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
*
* @package WordPress
* @subpackage Twenty_Seventeen
* @since 1.0
* @version 1.0
*/

get_header(); ?>

<div class="wrap">
  <div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">

      <?php
      /* Start the Loop */
      while ( have_posts() ) : the_post();

      get_template_part( 'template-parts/post/content', get_post_format() );

      // If comments are open or we have at least one comment, 
      // load up the comment template.
      if ( comments_open() || get_comments_number() ) :
        comments_template();
      endif;


      /*** AQUI PARSEAMOS EL CONTENIDO DEL POST ***/
      $contenido = get_the_content();

      // extraer links https://stackoverflow.com/a/24798689/1423096

      $re = '/<a href=\"([^\"]*)\">(.*)<\/a>/iU';

      if($num_found = preg_match_all($re, $contenido, $matches)) :
        $losLinks = $matches[0];

        /*** AQUI IMPRIMIMOS UN BOTON Y EL DIV OCULTO ***/
        ?>
        <div>
          <button
          class="button button-primary"
          onclick="document.getElementById('loslinks').style.display = 'block';"
          >Mostrar enlaces</button>
          <div id="loslinks" style="display:none;">
            <ul>
              <?php foreach($losLinks as $link) :?>
                <li><?php echo $link;?></li>
              <?php endforeach;?>
            </ul>
          </div>
        </div>
        <?php
      endif;
      /*******************************************/


      the_post_navigation( array(
        'prev_text' => '<span class="screen-reader-text">' .
        __( 'Previous Post', 'twentyseventeen' ) . 
        '</span><span aria-hidden="true" class="nav-subtitle">' . 
        __( 'Previous', 'twentyseventeen' ) . 
        '</span> <span class="nav-title"><span class="nav-title-icon-wrapper">' .
        twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) .
        '</span>%title</span>',
        'next_text' => '<span class="screen-reader-text">' .
        __( 'Next Post', 'twentyseventeen' ) . 
        '</span><span aria-hidden="true" class="nav-subtitle">' . 
        __( 'Next', 'twentyseventeen' ) . 
        '</span> <span class="nav-title">%title<span class="nav-title-icon-wrapper">' . 
        twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ) .
        '</span></span>',
      ) );

    endwhile; // End of the loop.
    ?>

  </main><!-- #main -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
</div><!-- .wrap -->

<?php get_footer();

Ideally, it would be a hook or a shortcode in the functions.php, or even more portable to build a plugin.

    
answered by 10.10.2018 в 19:38