El problema
Realmente estoy luchando para que wordpress genere una página dinámicamente basada en el contenido de una base de datos.
El contexto
Tengo una base de datos sql que contiene slugs e identificadores únicos, y puedo crear una página en wp que extrae los datos de la base de datos sql y los presenta en una tabla de elementos.
Lo que no sé cómo hacer es generar una página única basada en el slug (o incluso el Id) para cada fila de la tabla.
Mi código
Este es el código en la página de índice de los dispositivos y funciona bien; muestra lo que necesito, cada href es el slug de la base de datos.
Estoy usando un archivo php de plantilla personalizado para las páginas específicas de wordpress en cuestión.
page-206.php
– esto es para la página ‘índice’
<tbody style=>
<?php foreach ($devices AS $device):
//$newUrl = "http://example.com$device[slug]";
$newUrl = "page-device-repair-service.php?id=$device[slug]";
?>
<tr style=>
<td style=>
<a style=href="<?=$newUrl?>">
<?php echo "$device[deviceName]" ?>
</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
page-214.php
– esto es para la página de ‘resultados’
if (isset($_GET['id']))
{
$slug = $_GET ['id'];
}
else
{
$slug = "";
}
include 'sql_connect.php'; //db connection
$connection = new PDO ($dsn, $username, $password);
$connection -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "connection successful";
$sql = "SELECT *
FROM newdevices
WHERE slug = $slug";
$url = "http://18.168.90.222$slug";
Los resultados
El resultado que obtengo es ‘página no encontrada’, por lo que falta algo, simplemente no sé lo suficiente para saber qué.
Más lejos
¿Tengo que insertar el código php en la página directamente, en lugar de usar una plantilla? Si es así, ¿cómo hago para hacerlo en wordpress? Genere una nueva publicación de WordPress basada en la base de datos MySQL, diga que usaron el complemento Advanced Ads, pero he buscado y no estoy seguro de que eso sea lo que quiero. He intentado insertar el encabezado y el pie de página, pero no quiero que php se ejecute en todas las páginas del sitio, solo en esta página de «resultados».
Extra
En caso de que sea necesario, mi sql_connect.php
Se ve como esto
<?php
$host = "localhost";
$dbName = "myDatabase";
$username = "root";
$password = "xxxxxx";
$dsn = "mysql:host=$host;dbname=$dbName";
//specify if local or production
//$liveUrl = "http://.....$device[slug]";
//$newUrl = "http://18.168.90.222$device[slug]";
//$localUrl="http://localhost$device[slug]";
$devices = "";
try {
$connection = new PDO($dsn, $username, $password);
$connection -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "connection succesful";
$sql = "SELECT * FROM newdevices";
$devices = $connection -> query ($sql);
} catch (PDOException $error){
echo $error -> getMessage();
}
?>
Los comentarios son para cuando estoy probando en mi local o en mi sitio de producción.
Disculpe si me estoy perdiendo algo evidentemente obvio, soy relativamente nuevo en PHP, SQL y PHP en wordpress.
Editar
Sé que hay preguntas similares en SO y SE, he estado buscando, leyendo y tratando de replicar varias respuestas en mi propio código, ¡pero nada de lo que hago funciona!
.